0

私は次のような配列を持っています

[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
    )

どういうわけか私の機能を拡張することは可能ですか?

4

2 に答える 2

1

比較機能で必要なものをチェックできます。たとえば、quantity == amountの場合、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を使用することもできます。

于 2013-02-26T18:47:22.683 に答える
1

わかりませんが

public static function _sortByAmount($a, $b) {
        $byQuantity = $a['quantity'] - $b['quantity'];
        return $byQuantity ?: strcmp($a['typeName'], $b['typeName']);
}
于 2013-02-26T18:48:44.857 に答える