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

您可以在比较功能中检查您想要的任何内容。例如,如果数量 == 数量,则返回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 回答