所以,我有一个对象数组,我想这样排序:
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_multisort可能就是答案,但我似乎无法弄明白。
答案 0 :(得分:1)
编写您自己的比较函数并按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");
答案 1 :(得分:1)
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");