You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 08:24:02