2013-02-26 53 views
0

排序multidimensial陣列我有一個陣列,其看起來像由包含數字兩個值和字母

[0] => Array 
    (
     [typeName] => Element 
     [quantity] => 35 
     [flag] => 4 
    ) 

我已經發現了一種方法,通過使用usort()排序通過其子元素的數組。這對數值很有用。

public static function _sortByAmount($a, $b) { 
     return $b['quantity'] - $a['quantity']; 
} 

有時可能發生我有多個相同數量的數組元素。這些條目應該按名稱排序。最後,數組應該看起來像這樣。

[0] => Array 
    (
     [typeName] => Element 
     [quantity] => 567 
     [flag] => 4 
    ) 
[1] => Array 
    (
     [typeName] => aaa-element 
     [quantity] => 35 
     [flag] => 4 
    ) 
[2] => Array 
    (
     [typeName] => bbb-element 
     [quantity] => 35 
     [flag] => 4 
    ) 
[3] => Array 
    (
     [typeName] => Element 
     [quantity] => 10 
     [flag] => 4 
    ) 

是否有可能以某種方式擴展我的功能?

回答

1

你可以在你的比較函數中檢查任何你想要的東西。例如,如果數量==數量,則返回strcmp

public static function _sortByAmount($a, $b) { 
    if($b['quantity'] == $a['quantity']){ 
     return strcmp($a['typeName'], $b['typeName']); 
    } else { 
     return $b['quantity'] - $a['quantity']; 
    } 
} 

你也可以,如果你想檢查是不區分大小寫使用strcasecmp

+0

它的工作,謝謝! – sascha 2013-02-26 18:57:18

1

不知道,但

public static function _sortByAmount($a, $b) { 
     $byQuantity = $a['quantity'] - $b['quantity']; 
     return $byQuantity ?: strcmp($a['typeName'], $b['typeName']); 
} 
相關問題