如何按key对PHP多维数组的值求和?代码报错求助
解决嵌套数组按key求和的Notice错误及正确实现
你遇到的Notice错误主要有两个原因:一是第一次访问$sumArray[$id]时这个索引还没定义,二是你直接把数组和数字做累加操作,不符合PHP的类型规则。咱们一步步来修正:
错误原因拆解
- 未初始化数组索引:当第一次循环到某个
$id(比如1)时,$sumArray[$id]还不存在,直接用+=会触发"Undefined index"的Notice。 - 错误的累加对象:
$value是一个子数组(比如array(2)),你直接把它和$sumArray[$id]相加,会导致类型不匹配的问题,甚至后续计算出错。
修正后的代码
$items = array( 'red' => array( '1' => array(2), '2' => array(6, 1) ), 'green' => array( '2' => array(1, 9), '1' => array(1, 2) ) ); $sumArray = array(); foreach ($items as $k => $subArray) { foreach ($subArray as $id => $value) { // 先初始化索引,避免Notice if (!isset($sumArray[$id])) { $sumArray[$id] = 0; } // 先计算子数组的元素和,再累加到对应key的总和里 $sumArray[$id] += array_sum($value); } } print_r($sumArray);
代码说明
- 初始化索引:用
isset()检查$sumArray[$id]是否存在,不存在就设为0,彻底解决Notice问题。 - 子数组求和:使用
array_sum($value)把每个$value数组里的元素先加起来,得到一个数字后再累加到$sumArray[$id]中,完全匹配你的需求。
运行这段代码后,就能得到你期望的输出:
Array ( [1] => 5 [2] => 17 )
内容的提问来源于stack exchange,提问作者nanditha
相关产品推荐
相关产品推荐

