我使用的是PHP,我有一个数组
$nnarray = Array (
[9] => Array (
[1] => Array (
[2] => 433
[6] => 2
[4] => 101
)
[3] => Array (
[6] => 999
)
)
[14] => Array (
[2] => Array (
[2] => 0
[6] => 2
)
)
)
如何通过index
键将其全部相加?输出我想要如下
Array (
[9] => 1535
)
[14] => 2
)
)
1535
=433+2+101+999([9]
下的所有值(
现在我用下面的脚本来得到结果,它有其他有效的方法吗?
foreach($nnarray as $key => $value){
foreach($nnarray[$key] as $nkey => $nvalue){
foreach($nnarray[$key][$nkey] as $nnkey => $nnvalue){
$newarray[$key] = $newarray[$key]+$nnvalue;
}
}
}
print_r($newarray);
您混淆了键和值!
$newarray= array(); // create a new array to sum up
foreach ($array as $key1 => $valueArray1) { // looping through main array
$resultArray[$key1] = 0; // setting initial value to 0.
foreach ($valueArray1 as $key2 => $valueArray2) { // looping thru inner array
foreach ($valueArray2 as $key => $value) { // looping thru innermost array
$newarray[$key1] += $value;
}
}
}
var_dump($newarray);
结果将是
array(2) {
[9]=>
int(1535)
[14]=>
int(2)
}
较短的版本,需要>=PHP7.4.0
map sum=>映射和
$result = array_map(fn($v) => array_sum(array_map(fn($v) => array_sum($v), $v)), $data);
结果:
Array
(
[9] => 1535
[14] => 2
)
https://3v4l.org/04WcF
一些奇特的选项。
迭代程序:
$result = array_map(function($val)
{
return array_sum(iterator_to_array(new RecursiveIteratorIterator(new RecursiveArrayIterator($val))));
}, $array);
阵列行走:
$result = array_map(function($val)
{
array_walk_recursive($val, function($v) use (&$sum) { $sum += $v; });
return $sum;
}, $array);