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
相关产品推荐
相关产品推荐

