简体   繁体   English

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM