PHP:按子阵列值排序数组(降序)

时间:2018-02-06 14:02:56

标签: php arrays sorting

我正在尝试按内部数组值对数组进行排序。

我实际上尝试的是通过“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);

1 个答案:

答案 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']);
}