如何通过PHP数组中的"index"键将其全部相加



我使用的是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);

最新更新