[英]PHP: Sort Array by subarray values (descending)
I am trying to sort an array by its inner array values. 我试图按其内部数组值对数组进行排序。
What I am actually trying is to sort $main_array by the values of "aa", "bb", "cc" (no matter which key is it, only need sorting by the values which are not empty and in descending order). 我实际上正在尝试按$ aa,bb,cc的值对$ main_array进行排序(无论它是哪个键,只需要按不为空且按降序排列的值进行排序)。 I checked for solution, but didn't find.
我检查了解决方案,但没有找到。 Thanks in advance
提前致谢
Code: 码:
$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);
You could sum your data using array_sum()
, or array_max()
: 您可以使用
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);
As pointed by @deceze, here is a shorter function using difference between values instead of comparing the three states (see comments below) : 如@deceze所指出的,这是一个较短的函数,使用值之间的差异而不是比较三个状态(请参见下面的注释):
function func($a, $b) {
return array_sum($b['score']) - array_sum($a['score']);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.