我无法上班,也不确定我错过了什么。下面是我的数组的一个例子。我想根据排序键的值对数组进行排序。
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;
});
}
然而,由于数组的顺序没有变化,我的代码似乎无效。我觉得我很接近,但无法确定我失踪的东西。谢谢你的帮助!
答案 0 :(得分:1)
实现相同功能的另一种方法是使用https://github.com/moritz91/drf-react-app和所需的排序标记组合。
数据集:
$resultsArray = array(
array('sort'=>1520546956, 'row'=>'row 0 data'),
array('sort'=>1521047928, 'row'=>'row 1 data'),
array('sort'=>1520525366, 'row'=>'row 2 data'),
array('sort'=>1520525227, 'row'=>'row 3 data')
);
array_multisort
示例:
$sortValues = array_column($resultsArray, 'sort');
array_multisort($sortValues, SORT_ASC, $resultsArray);
print_r($resultsArray);
Array
(
[0] => Array
(
[sort] => 1520525227
[row] => row 3 data
)
[1] => Array
(
[sort] => 1520525366
[row] => row 2 data
)
[2] => Array
(
[sort] => 1520546956
[row] => row 0 data
)
[3] => Array
(
[sort] => 1521047928
[row] => row 1 data
)
)
或者您仍然可以使用https://3v4l.org/NpVIc,但在您的函数中,您需要检索名为sort
的关联数组键,以便比较这些值。
usort示例:
usort($resultsArray, function($a, $b) {
if ($a['sort'] == $b['sort']) {
return 0;
}
return ($a['sort'] < $b['sort'] ? -1 : 1);
});
print_r($resultsArray);
结果:usort
答案 1 :(得分:0)
修改后的代码以反映以下建议:
usort($resultsArray, function($a, $b) { /* compare $a['sort'] and $b['sort'] */ }
完美地工作。
答案 2 :(得分:0)
$record['sort']
必须是一个可以工作的数组。然而,它什么也没做。
我很确定你想这样做:
<?php
$multiArray = array(
array('sort'=>1520546956, 'row'=>'row 0 data'),
array('sort'=>1521047928, 'row'=>'row 1 data'),
array('sort'=>1520525366, 'row'=>'row 2 data'),
array('sort'=>1520525227, 'row'=>'row 3 data'));
foreach($multiArray as $a){
$numArray[] = $a['sort'];
}
asort($numArray, SORT_NUMERIC);
foreach($numArray as $k => $v){
$resArray[] = $multiArray[$k];
}
print_r($resArray);
?>
答案 3 :(得分:0)
这是因为php foreach构造可在提供的数组副本(即$ resultsArray)上工作,其中php usort()函数引用或指向同一数组。这就是为什么您的代码无法按预期工作的原因。 如果您不了解此概念,我建议您在Lynda.com上通过Kevin skoglund(php基本培训)进行一次不错的在线课程