PHP中array_sum返回0,如何正确对二维结构的$subtotal数组求和?
问题原因
你当前的$subtotal是二维数组,每个元素都是仅包含1个数值的子数组。PHP内置的array_sum()只能直接对一维数组的数值元素求和,遇到数组类型的元素时无法正确识别为数值,所以最终求和结果为0。
解决方法
方法1:修改生成$subtotal的逻辑(推荐)
不需要把计算出的小计塞进新数组里,直接存数值即可,修改后的循环代码如下:
foreach ($item_id as $key => $no) { $input['price'] = $price[$key]['price']; $input['quantity'] = $quantity[$key]; // 直接存计算出的数值,不要套方括号生成子数组 $subtotal[] = $input['price'] * $input['quantity']; } $total_price = array_sum($subtotal);
修改后$subtotal会变成一维数值数组,array_sum()就能正常计算出正确总和。
方法2:直接对现有二维数组求和
如果不方便修改前面生成$subtotal的代码,可以用以下两种方式计算总和:
- 用
array_column提取所有子数组里的数值再求和:
// 提取所有子数组中键为0的数值,再调用array_sum求和 $total_price = array_sum(array_column($subtotal, 0));
- 用
array_reduce自定义求和逻辑:
$total_price = array_reduce($subtotal, function($carry, $item) { return $carry + $item[0]; }, 0);
两种写法都能得到正确的总和3000012。
内容的提问来源于stack exchange,提问作者SomeRandomCode
相关产品推荐
相关产品推荐

