【发布时间】:2018-03-20 23:42:27
【问题描述】:
我无法让 usort 工作,并且不确定我缺少什么。下面是我的数组的一个例子。我想根据排序键的值对数组进行排序。
Array
(
[0] => Array
(
[sort] => 1520546956
[row] => Data lives here
)
[1] => Array
(
[sort] => 1521047928
[row] => Data lives here
)
[2] => Array
(
[sort] => 1520525366
[row] => Data lives here
)
[3] => Array
(
[sort] => 1520525227
[row] => Data lives here
)
我尝试排序的代码是:
foreach ($resultsArray as $record)
{
usort($record['sort'], function($a, $b)
{
if ($a == $b)
{
return 0;
}
return ($a < $b) ? -1 : 1;
});
}
但是我的代码似乎无效,因为数组的顺序没有改变。我觉得我很接近,但无法确定我错过了什么。感谢您的帮助!
【问题讨论】:
-
$record将是数组元素的副本,而不是引用。因此,您对元素所做的任何更改都不会保留。要解决此问题,请在排序后执行foreach($resultsArray as $index=>$record),然后执行$resultsArray[$index] = $record,或者执行foreach($resultsArray as &$record)——注意第二个示例中的&! -
此外,您的排序逻辑本身已关闭。
usort对给定数组进行就地排序。因此,$record['sort']应该是一个数组。如果您想正确使用usort,请使用usort($resultsArray, function($a, $b) { /* compare $a['sort'] and $b['sort'] */ }!这将完全避免使用foreach循环。 -
@B.Fleming 成功了——最终使用
usort($resultsArray, function($a, $b) { /* compare $a['sort'] and $b['sort'] */ }并且现在可以正常工作。谢谢!