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);
我正在尝试对多维数组进行排序。
我的数组中有以下结构:
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);