【问题标题】:PHP - How can I sort this multi dimensional array by sum value?PHP - 如何按总和值对这个多维数组进行排序?
【发布时间】:2016-05-09 19:13:49
【问题描述】:

如何按最深嵌套数组中每个集合的总和值对这个数组进行排序?

$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 可能是我最好的选择,但我似乎无法让它适用于我的用例。

【问题讨论】:

  • 如果您可以包含您已经尝试过的内容,这可能会有所帮助

标签: php arrays sorting


【解决方案1】:

使用usortarray_sumarray_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);

输出:

Array
(
    [0] => Array
        (
            [0] => I am the second string
            [1] => Array
                (
                    [0] => Array
                        (
                            [0] => cps
                            [1] => 1
                            [2] => 1
                        )
                    [1] => Array
                        (
                            [0] => Hz
                            [1] => 1
                            [2] => 3
                        )
                    [2] => Array
                        (
                            [0] => hertz
                            [1] => 1
                            [2] => 1
                        )
                )
        )
    [1] => Array
        (
            [0] => I am the third string.
            [1] => Array
                (
                    [0] => Array
                        (
                            [0] => uucps
                            [1] => 1
                            [2] => 1
                        )
                    [1] => Array
                        (
                            [0] => uuHz
                            [1] => 1
                            [2] => 2
                        )
                    [2] => Array
                        (
                            [0] => uuhertz
                            [1] => 1
                            [2] => 1
                        )
                )
        )
    [2] => Array
        (
            [0] => I am the first string.
            [1] => Array
                (
                    [0] => Array
                        (
                            [0] => round
                            [1] => 1
                            [2] => 1
                        )
                    [1] => Array
                        (
                            [0] => rhythm
                            [1] => 1
                            [2] => 1
                        )
                )
        )
)

【讨论】:

  • 非常感谢。我想我错过了array_column的知识。我试图在没有它的情况下求和,但它显然不起作用,因为我并没有真正将数组传递给它,而是一次一个值,因为它在循环中。再次感谢您。
猜你喜欢
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-11
相关资源
最近更新 更多