我有一个类似下面的数组
我需要将此数组排序为某个顺序,例如。 我如何通过name属性自定义订单,例如C2,C1,C3?
array(11) {
[0]=>
object(stdClass)#1569 (8) {
["name"]=>
string(36) "C1"
}
[1]=>
object(stdClass)#1589 (8) {
["name"]=>
string(36) "C2"
}
[2]=>
object(stdClass)#1599 (8) {
["name"]=>
string(36) "C3"
}
}
答案 0 :(得分:2)
在数组中定义自定义顺序。
$order = ['C2' => 0, 'C1' => 1, 'C3' => 2];
然后use
比较回调中的数组usort
。
usort($objects, function($ob1, $ob2) use ($order) {
return $order[$ob1->name] <=> $order[$ob2->name];
});
如果某些对象可能没有名称属性,或者他们的名称属性可能不包含在自定义顺序中,我们可以设置默认值任何这些将被分类到最后。 (这将阻止&#34;未定义索引&#34;以及&#34;未定义属性&#34;通知。)
usort($objects, function($ob1, $ob2) use ($order) {
return ($order[($ob1->name ?? '')] ?? end($order) + 1)
<=> ($order[($ob2->name ?? '')] ?? end($order) + 1);
});