如何在PHP循环中对相同月份对应的数组值进行累加求和?
问题排查与修复方案
原代码错误原因
- 核心累加逻辑被注释:你写的累加代码
$mainarr[$i]+=$value['y'];被//注释,没有实际执行 - 初始化逻辑位置错误:将1-12月的初始化循环放在了每条业务数据的遍历逻辑内,每次处理单条数据时,只要对应月份已经有值就不再处理,后续同月份的数值自然无法累加
- 变量匹配逻辑偏差:你的业务数据中月份是
month_release字段、数值是amount_granted字段,累加时调用的字段名y和实际字段不匹配
修复后代码
// 第一步:先初始化1-12月的默认值为0 $mainarr = []; for ($i = 1; $i <= 12; $i++) { $mainarr[$i] = 0; } // 第二步:遍历业务数据做累加 foreach ($loans3rdChart as $value) { // 把字符串格式的月份转成数字,匹配数组键 $month = (int)$value['month_release']; // 累加对应月份的数值,转成数字避免字符串拼接 $mainarr[$month] += (int)$value['amount_granted']; } // 可选:如果需要非0值保留字符串格式,再遍历转换 foreach ($mainarr as $k => $v) { $mainarr[$k] = $v == 0 ? 0 : (string)$v; } // 输出JSON结果 echo json_encode($mainarr);
执行结果验证
运行上述代码后输出的JSON和你期望的结果完全一致:{"1":0,"2":0,"3":0,"4":0,"5":"30000","6":"10000","7":"79000","8":"10000","9":"10000","10":0,"11":0,"12":0}
内容的提问来源于stack exchange,提问作者Eli
相关产品推荐
相关产品推荐

