PHP - 自定义对象数组的顺序,即C1,C2,C3到C2,C1,C3

时间:2018-05-14 22:37:12

标签: php arrays

我有一个类似下面的数组

我需要将此数组排序为某个顺序,例如。 我如何通过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"
      }
    }

1 个答案:

答案 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);
});