我正在尝试按内部数组值对数组进行排序。
我实际上尝试的是通过“aa”,“bb”,“cc”的值对$ main_array进行排序(无论它是哪个键,只需要按非空值和降序排序) )。我检查了解决方案,但没有找到。提前致谢
代码:
$main_array = array(
array(
"firstName" => "Alex",
"age" => 35,
"score" => array("aa" => "", "bb" => "", "cc" => 180)
),
array(
"firstName" => "Helena",
"age" => 41,
"score" => array("aa" => 410, "bb" => "", "cc" => "")
),
);
function func($a, $b) {
if ($a['score'] == $b['score']) {
return 0;
}
return ($a['score'] < $b['score']) ? 1 : -1;
}
uasort($main_array, 'func');
print_r($main_array);
答案 0 :(得分:2)
您可以使用array_sum()
或array_max()
:
function func($a, $b) {
$suma = array_sum($a['score']); // or array_max
$sumb = array_sum($b['score']); // or array_max
if ($suma == $sumb) { return 0; }
return ($suma < $sumb) ? 1 : -1 ;
// or just : return $suma <=> $sumb ; // As of PHP 7
}
uasort($main_array, 'func');
print_r($main_array);
正如@deceze所指出的,这是一个较短的函数,它使用值之间的差异而不是比较三种状态(参见下面的注释):
function func($a, $b) {
return array_sum($b['score']) - array_sum($a['score']);
}