我正在使用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);发布于 2021-06-12 11:15:20
您混淆了键和值!
$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)
}发布于 2021-06-12 11:31:55
较短版本,需要>= PHP7.4.0
地图总和=>地图总和
$result = array_map(fn($v) => array_sum(array_map(fn($v) => array_sum($v), $v)), $data);结果:
Array
(
[9] => 1535
[14] => 2
)发布于 2021-06-12 13:55:42
一些异国情调的选择。
迭代器:
$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);https://stackoverflow.com/questions/67945210
复制相似问题