PHP遍历数组求和做除法报DivisionByZeroError除零错误解决方法
问题成因
报错的核心原因是循环内的累加逻辑存在错误,最终导致$total_b始终为初始值0:
- 累加
$total_b时传入了整个数组而非单个元素:代码中写的是$total_b += $num_b,右侧操作数是完整的$num_b数组,不是数组内的数值。PHP算术运算中数组参与整数计算时会被隐式转换为数值0,两次循环相当于给$total_b累加了两次0,变量值没有任何变化。 - 未按遍历下标匹配对应元素:当前循环遍历的是
$num_a数组,循环中拿到的$key是$num_a元素对应的下标,即使要取$num_b的元素参与计算,也需要通过下标匹配对应位置的值,直接写数组名无法拿到单个元素。
修复方案
方案1:修正循环累加逻辑
调整循环内的$total_b累加规则,通过循环拿到的$key取$num_b对应位置的元素做累加:
$total_a = 0; $total_b = 0; foreach($num_a as $key => $a){ $total_a += $a; $total_b += $num_b[$key]; } // 除法运算前额外判断除数非0,从根源避免除零错误 if ($total_b !== 0) { $result = $total_a / $total_b; } else { // 按需处理除数为0的场景,比如设置默认值、抛出业务提示 $result = 0; }
如果两个数组长度不固定,更稳妥的方式是单独遍历$num_b完成$total_b的累加,避免按下标取值时出现不存在的下标报错。
方案2:使用PHP内置求和函数(推荐)
不需要手动写循环遍历,直接调用PHP原生的array_sum()函数即可计算数组所有元素的和,代码更简洁,也不容易出现手写循环的逻辑错误:
$total_a = array_sum($num_a); $total_b = array_sum($num_b); if ($total_b !== 0) { $result = $total_a / $total_b; } else { $result = 0; }
内容的提问来源于stack exchange,提问作者Al zildan AR
相关产品推荐
相关产品推荐

