所以,我有一个对象数组,我想像这样排序:
Array
(
[463] => stdClass Object
(
[name] => Organic 12
[total_weight] => 5
)
[340] => stdClass Object
(
[name] => Organic 12b
[total_weight] => 5
)
[340] => stdClass Object
(
[name] => Organic 12c
[total_weight] => 5
)
[532] => stdClass Object
(
[name] => Alpha 10
[total_weight] => 4
)
[203] => stdClass Object
(
[name] => General 5
[total_weight] => 3
)
)
在所有对象的total_weight从高到低排序的情况下,在这些排序中,对象按名称的字母顺序排序。我可以用php的usort成功地按total_weight对它们进行排序,但不知道如何对结果进行子排序。仅使用usort,排序后的结果不一致,因此在一个结果中,一个对象的名称可能会出现在另一个对象之上,但在另一个中则不会。
我想也许array_multiport可能是答案,但我似乎想不通。
编写自己的比较函数并通过usort应用它。诀窍是在权重相等时应用额外的比较。
应该是这样的:
function compareObj($a, $b)
{
if ($a->total_weight == $b->total_weight) {
return strcmp($a->name, $b->name);
}
return ($a->total_weight > $b->total_weight) ? -1 : 1;
}
usort($array, "compareObj");
function cmp($a, $b)
{
if ($a->total_weight == $b->total_weight) {
return strcmp($a->name, $b->name);
}else{
return $a->total_weight > $b->total_weight ? -1 : 1
}
}
usort($array, "cmp");