PHP foreach遍历订单项累加subtotal与税费结果错误如何修复
问题原因
- 循环内未做累加操作:每次遍历订单项时都直接给
$nvCantVar赋值,直接覆盖了上一轮的计算结果,循环结束后该变量仅存储最后一条订单项的(subtotal+subtotal_tax)值,也就是14022。 - 额外重复计算:循环结束后执行了
$nvCantVar = $nvCantVar + $nvCantVar,相当于把最后一条的结果乘了2,得到28044,和实际输出的错误值完全匹配。 - 订单项键名不统一:前两条测试数据用的是
total、total_tax作为键名,代码里统一读取subtotal、subtotal_tax会导致前两条数据读不到有效值,默认会被当成0计算,也会导致结果偏差。
修复代码
$nvCantVar = 0; foreach ($input['order_items'] as $orderItem) { // 兼容两种键名,优先取subtotal,不存在则取total $subtotal = isset($orderItem['subtotal']) ? $orderItem['subtotal'] : $orderItem['total']; $subtotal_tax = isset($orderItem['subtotal_tax']) ? $orderItem['subtotal_tax'] : $orderItem['total_tax']; // 累加金额,不要直接赋值 $nvCantVar += $subtotal + $subtotal_tax; }
运行修复后的代码,计算结果为13302+0 + 9711+0 + 14022+0 = 37035,和预期一致。
内容的提问来源于stack exchange,提问作者className
相关产品推荐
相关产品推荐

