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

PHP中如何累加foreach循环的$total_amount得到$grand_total

解决方案:按支付方式分组统计并计算总计

你的现有代码逻辑未实现按支付方式分组统计的需求,而是直接累加了所有条目金额,因此无法输出多个支付方式对应的独立总额。要实现分组统计+总计,需先按支付方式分组存储各方式总额,同时同步累加得到总计。

修改后的完整代码如下:

<table>
<?php
$all_entry = json_decode($retrieved_data->income_entry);
// 初始化分组存储数组和总计变量
$pay_method_totals = [];
$grand_total = 0;

foreach ($all_entry as $entry) {
    $pay_method = $entry->pay_method; // 取当前条目自身的支付方式
    $amount = $entry->amount;
    
    // 按支付方式分组累加金额
    if (!isset($pay_method_totals[$pay_method])) {
        $pay_method_totals[$pay_method] = 0;
    }
    $pay_method_totals[$pay_method] += $amount;
    
    // 同步累加得到总计
    $grand_total += $amount;
}

// 遍历分组数组,输出每个支付方式的总额
foreach ($pay_method_totals as $method => $total) {
?>
  <tr>
    <td><?php echo esc_html($method); ?>:</td>
    <td><?php echo esc_html($total); ?></td>
  </tr>
<?php } ?>
</table>
<p>Grand Total: <?php echo esc_html($grand_total); ?></p>

关键修改说明:

  • 新增$pay_method_totals数组,以支付方式为键名存储对应总额,解决多支付方式的分组统计问题
  • 修正支付方式的取值逻辑:原代码错误使用$retrieved_data->pay_method(会导致所有行显示同一支付方式),改为取当前条目$entry->pay_method
  • 在分组累加的同时,将每个条目的金额同步加到$grand_total,最终得到所有金额的总和
  • 遍历分组数组输出每一组的支付方式与对应总额,同时保证总计为所有金额的累加值

按此代码执行后,会自动合并同支付方式的金额(如示例中的Cash会合并为15+24+12=51,Card为37),最终Grand Total将显示51+37=88,符合你的需求。

内容的提问来源于stack exchange,提问作者Elaine Byene

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 17:50:05