PHP : 在循环中使用 Usort()

PHP : using Usort() inside a Loop

我正在尝试对多维数组进行排序。

我的数组中有以下结构:

array
(
    [1] => stdClass Object
        (
            [events] => Array
                (
                    [0] => stdClass Object
                        (
                            [id] => 1
                            [task] => task1
                            [date_task] => 2018-04-02
                            [start] => 8
                            [end] => 10
                        )

                    [1] => stdClass Object
                        (
                            [id] => 7
                            [task] => task 32
                            [date_task] => 2018-04-02
                            [start] => 10
                            [end] => 12
                        )
                )
        )
    [2] => stdClass Object
        (
           [events] => Array
                (
                    [0] => stdClass Object
                        (
                            [id] => 4
                            [task] => task4
                            [date_task] => 2018-04-06
                            [start] => 11
                            [end] => 15
                        )
                    [1] => stdClass Object
                        (
                            [id] => 5
                            [task] => task5
                            [date_task] => 2018-04-06
                            [start] => 8
                            [end] => 10
                        )
                )
        )
)

如果我尝试像这样在 FOR 或 FOREACH 循环中使用 Usort() 函数:

for ($i = 1; $i <= count($MyArray); $i++) {
         usort($MyArray[$i]->events, function($a, $b) {
         return $b->start <=> $a->start;
     });
    }

我收到此错误:

usort() expects parameter 1 to be array, string given

我该如何解决这个问题?

1.try 使用 foreach() 而不是 for()。 (因为它自己处理索引)。

2.Use passing by reference mechanism

按如下操作:-

foreach ($MyArray as &$MyArr) {
  foreach ($MyArr as &$MyAr) {
    if (is_array($MyAr)){
       usort($MyAr, function($a, $b) {
          return ($b->start <= $a->start) ? 1 : -1;
       });
    }
  }
}

print_r($MyArray);

输出:-https://eval.in/984958