PHP:如何按键中年份对月年格式关联数组分组求和并输出表格?
按年份汇总月度数据的解决方案
看起来你现在的代码是在逐行处理月度数据,但还没实现按年份展示年度总计的效果。我帮你调整了代码,既能保留月度明细,又能在每个年份结束后显示该年度的汇总行,完全匹配你想要的输出样式:
完整修改后的代码
<?php $array_list = [ "Jan 2016" => 2, "Feb 2016" => 4, "Mar 2016" => 2, "Apr 2016" => 0, "Jan 2017" => 9, "Feb 2017" => 2, "Mar 2017" => 5, "Jan 2018" => 4, "Feb 2018" => 6 ]; ?> <table border='1' cellpadding='5' cellspacing='3'> <tr> <td>SN</td> <td>Month</td> <td>Year</td> <td>is new?</td> <td>Data</td> <td>Total</td> </tr> <?php $prev_year = null; $i = 1; $year_total = 0; // 先遍历所有数据,同时记录年度累计 foreach ($array_list as $key => $val): list($month_label, $year_label) = explode(" ", $key); // 当遇到新年份时,先输出上一年的总计行(如果不是第一个年份) if ($prev_year !== null && $year_label !== $prev_year) { echo "<tr> <td colspan='4' align='right'><b>Yearly Total for $prev_year:</b></td> <td><b>$year_total</b></td> <td><b>$year_total</b></td> </tr>"; // 重置年度累计和新年份标记 $year_total = 0; echo "<tr><td colspan='6'> </td></tr>"; // 年份间的分隔行 } // 计算当前年度累计 $year_total += $val; // 判断是否是新年份 $str = ($year_label !== $prev_year) ? "--new--" : "same"; // 输出月度行 echo "<tr> <td>$i</td> <td>$month_label</td> <td>$year_label</td> <td>$str</td> <td>$val</td> <td><b>$year_total</b></td> </tr>"; $i++; $prev_year = $year_label; endforeach; // 输出最后一个年份的总计行 if ($prev_year !== null) { echo "<tr> <td colspan='4' align='right'><b>Yearly Total for $prev_year:</b></td> <td><b>$year_total</b></td> <td><b>$year_total</b></td> </tr>"; } ?> </table>
关键修改点说明
- 年度累计逻辑:新增
$year_total变量,在遍历月度数据时实时累加当前年份的金额 - 新年份判断:当切换到新年份时,先输出上一年的总计行,再重置累计值
- 末尾总计处理:遍历结束后单独输出最后一个年份的总计,避免遗漏
- 格式优化:总计行合并前4列并右对齐,突出汇总信息,同时保留年份间的分隔行提升可读性
这样修改后,表格会先展示每个月份的明细,每个年份结束后自动展示该年度的总金额,完全符合你期望的输出效果。
内容的提问来源于stack exchange,提问作者Dhiraj Kumar
相关产品推荐
相关产品推荐

