提取多维数组的总和,包括嵌入式子数组

时间:2019-06-13 07:41:50

标签: php arrays multidimensional-array

我希望提取包括嵌入子数组在内的完整多维数组的总和。

我知道您可以提取顶层,但是它不会为您提供子数组总和。同样,每次提取子数组只会将特定的子数组相加。

故意将键名保留为数字,因为我的大脚本会不断增加数组。由于子阵列的这种增长,子阵列可以是1,但也可以是100。

问题:

如何提取总多维数组及其子数组的值。

[$ array_1]可以正常工作:

<?php

/**
 * [array_1]
 * Array
 */

    $array_1 = [1, 2, 4];
?>
<pre>

<?php
    print_r($array_1);



    echo("Sum complete array_1: " . array_sum($array_1));

[$ array_2]无法获得总价值。

/**
 * [array_2]
 * Multidimensional array.
 */

    $array_2 = [

            [
                1, 2, 7
            ],

            [
                4, 5, 6
            ]

    ];
?>

<pre>
<?php

    print_r($array_2);

    // [$array_2].
    echo("Sum complete array_2: " . array_sum($array_2)); // Returns zero.
    echo("\n\n");
    echo("Sum sub-array [0]:" . array_sum($array_2["0"])); // Returns 10.
    echo("\n\n");
    echo("\n\n");

预期结果[$ array_2]:

25

5 个答案:

答案 0 :(得分:3)

单线,

echo array_sum(array_merge(...$array_2));

我通过将内部数组展平到1d,然后使用array_sum来添加内部数组。

array_merge-合并一个或多个数组

...称为splat operator,它将数组作为单独的参数公开给数组计数。

编辑

这里还有一个,

echo array_sum(array_reduce($array_2, 'array_merge', []));

输出: 25

答案 1 :(得分:1)

array_reduce最适合此类情况。您将每个子数组的总和收集到一个变量中并返回它们。

<?php

 $array_2 = [

            [
                1, 2, 7
            ],

            [
                4, 5, 6
            ]

];



$sum = array_reduce($array_2,function($sum,$value){
        $sum += array_sum($value);
        return $sum;
});

echo $sum;

还请注意,与数组合并相比,这将占用更少的空间,因为每个子数组的长度可以为100或更大,并且至少有1000个这样的子数组(因为您说数组可以增长)。

答案 2 :(得分:0)

您可以将array_maparray_sum一起使用(遍历每个子数组)

$t = 0;
array_map(function($v) use (&$t){ $t += array_sum($v);}, $array_2);

Working example

答案 3 :(得分:0)

您可以执行最快的方式,

<?php

$tot = 0;
foreach($array_2 as $value){
    $tot +=array_sum($value);
}
echo $tot;

输出:

25

DEMO

答案 4 :(得分:0)

array_sum(call_user_func_array('array_merge', $array_2))