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

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'>&nbsp;</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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:18:17