PHP - 如何按和值对这个多维数组进行排序?

时间:2016-05-09 19:13:50

标签: php arrays sorting

如何通过最深嵌套数组中每个集合的和值对此数组进行排序?

$arr = Array(
    Array(
        'I am the first string.',
        Array(
            Array( 'round', 1, 1 ),
            Array( 'rhythm', 1, 1 )
        )
    ),
    Array(
        'I am the second string',
        Array(
            Array( 'cps', 1, 1 ),
            Array( 'Hz', 1, 3 ),
            Array( 'hertz', 1, 1 )
        )
    ),
    Array(
        'I am the third string.',
        Array(
            Array( 'uucps', 1, 1 ),
            Array( 'uuHz', 1, 2 ),
            Array( 'uuhertz', 1, 1 )
        )
    )

);

我需要通过最深集(第三维)的第三个键的和值对数组的第二维进行排序。

所以最终结果如下:

$arr = Array(
    Array(
        'I am the second string',
        Array(
            Array( 'cps', 1, 1 ),
            Array( 'Hz', 1, 3 ),
            Array( 'hertz', 1, 1 )
        )
    ),
    Array(
        'I am the third string.',
        Array(
            Array( 'uucps', 1, 1 ),
            Array( 'uuHz', 1, 2 ),
            Array( 'uuhertz', 1, 1 )
        )
    ),
    Array(
        'I am the first string.',
        Array(
            Array( 'round', 1, 1 ),
            Array( 'rhythm', 1, 1 )
        )
    )

);

我知道usort可能是我最好的选择,但我似乎无法使其适用于我的用例。

1 个答案:

答案 0 :(得分:2)

使用http://localhost:4848/common/index.jsfusortarray_sum函数的解决方案:

array_column

输出:

usort($arr, function($a, $b){
    $prev = array_sum(array_column($a[1], 2)); // summing up values for each third key (2)
    $next = array_sum(array_column($b[1], 2));

    return $next - $prev;    
});

print_r($arr);