首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过PHP数组中的`index`键将其相加?

如何通过PHP数组中的`index`键将其相加?
EN

Stack Overflow用户
提问于 2021-06-12 10:45:20
回答 3查看 27关注 0票数 1

我正在使用PHP,并且我有一个数组

代码语言:javascript
运行
复制
$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键将其全部相加?输出结果如下所示

代码语言:javascript
运行
复制
Array ( 
    [9] => 1535
    ) 
    [14] => 2
    ) 
)

1535 = 433+2+101+999 ([9]下的所有值)

现在我使用下面的脚本来得到结果,有没有其他有效的方法?

代码语言:javascript
运行
复制
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);
EN

回答 3

Stack Overflow用户

发布于 2021-06-12 11:15:20

您混淆了键和值!

代码语言:javascript
运行
复制
$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);

结果将会是

代码语言:javascript
运行
复制
array(2) {
  [9]=>
  int(1535)
  [14]=>
  int(2)
}
票数 0
EN

Stack Overflow用户

发布于 2021-06-12 11:31:55

较短版本,需要>= PHP7.4.0

地图总和=>地图总和

代码语言:javascript
运行
复制
$result = array_map(fn($v) => array_sum(array_map(fn($v) => array_sum($v), $v)), $data);

结果:

代码语言:javascript
运行
复制
Array
(
    [9] => 1535
    [14] => 2
)

https://3v4l.org/04WcF

票数 0
EN

Stack Overflow用户

发布于 2021-06-12 13:55:42

一些异国情调的选择。

迭代器:

代码语言:javascript
运行
复制
$result = array_map(function($val)
{
    return array_sum(iterator_to_array(new \RecursiveIteratorIterator(new \RecursiveArrayIterator($val))));
}, $array);

数组遍历:

代码语言:javascript
运行
复制
$result = array_map(function($val)
{
    array_walk_recursive($val, function($v) use (&$sum) { $sum += $v; });

    return $sum;
}, $array);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67945210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档