我希望提取包括嵌入子数组在内的完整多维数组的总和。
我知道您可以提取顶层,但是它不会为您提供子数组总和。同样,每次提取子数组只会将特定的子数组相加。
故意将键名保留为数字,因为我的大脚本会不断增加数组。由于子阵列的这种增长,子阵列可以是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
答案 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_map
与array_sum
一起使用(遍历每个子数组)
$t = 0;
array_map(function($v) use (&$t){ $t += array_sum($v);}, $array_2);
答案 3 :(得分:0)
您可以执行最快的方式,
<?php
$tot = 0;
foreach($array_2 as $value){
$tot +=array_sum($value);
}
echo $tot;
输出:
25
答案 4 :(得分:0)
array_sum(call_user_func_array('array_merge', $array_2))