简体   繁体   English

PHP按值计数然后按子数组键对子数组进行排序

[英]PHP sort sub array by count of values then by sub array key

What's the easiest way to sort a multi dimensional array. 对多维数组进行排序的最简单方法是什么。 I need to sort it so the output is displayed with the highest count of values on the sub arrays then the sorted alphabetically by the key of the sub arrays: 我需要对它进行排序,以便在子数组上显示具有最高值计数的输出,然后按子数组的键按字母顺序排序:

So something like this: 所以像这样:

MyArray(
  subarray4('val1')
  subarray2('val1')
  subarray3('val1', 'val2', 'val3')
  subarray1('val1', 'val2', 'val3')
)

Would look more like this: 看起来会像这样:

MyArray(
  subarray1('val1', 'val2', 'val3')
  subarray3('val1', 'val2', 'val3')
  subarray2('val1')
  subarray4('val1')
)
$array = array(
    array('val1'),
    array('val1'),
    array('val1', 'val2', 'val3'),
    array('val1', 'val2', 'val3'),
);

function sortByCount($a, $b) {
    $a = count($a);
    $b = count($b);

    if($a == $b) {
        return 0;
    }

    return ($a > $b) ? -1 : 1;
}

uasort($array, 'sortByCount');

Two steps here, first sort array according to subarray count, then loop through array sorting each subarray "alphanumerically". 这里有两个步骤,首先根据子数组计数对数组进行排序,然后循环遍历数组以字母数字方式对每个子数组进行排序。

$myArray = array(
  array('val1', 'val2'),
  array('val3'),
  array('val7', 'val6', 'val5', 'val4'),
  array('val8', 'val9', 'val10'),
);

// sort primary array by subarray count
uasort($myArray, function ($a, $b) {
    $a = count($a);
    $b = count($b);
    return ($a == $b) ? 0 : (($a > $b) ? -1 : 1);
});

// now sort each subarray alphanumerically
foreach ( $myArray as $key => $arr ) {
    natsort($myArray[$key]); // letters - alpha, numbers - numeric
    // note: ignoring $arr because sorting it does not affect $myArray
}

print '<pre>';
print_r($myArray);
print '</pre>';

Output: 输出:

Array
(
    [2] => Array
        (
            [3] => val4
            [2] => val5
            [1] => val6
            [0] => val7
        )

    [3] => Array
        (
            [0] => val8
            [1] => val9
            [2] => val10
        )

    [0] => Array
        (
            [0] => val1
            [1] => val2
        )

    [1] => Array
        (
            [0] => val3
        )

)

The uasort sorting algorithm is cut and paste from here: Sorting array by count of subarray 从这里剪切并粘贴uasort排序算法: 按子数组计数对数组进行排序

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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