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

PHP按年份分组日期数组并生成前端分组列表的实现方法

解决PHP数据按年份分组生成前端列表的问题

嘿,这个需求其实很好实现,咱们分两步走:先把你的原始数据整理成「年份→月份列表」的分组结构,再循环输出对应的HTML标签就行。我给你写具体的代码和思路:

第一步:预处理数据,按年份分组

你的原始数组每个元素都是只有一个键值对的数组,值是YYYY.MM格式的字符串。我们需要先把这些值拆分成年份和月份,然后整理成按年份分组的结构:

// 初始化空数组存储分组后的数据
$groupedData = [];

foreach ($res as $item) {
    // 取出每个元素里的年月字符串(因为每个item只有一个键值对,用reset()直接取值)
    $yearMonthStr = reset($item);
    // 把年月拆分成单独的年份和月份
    list($year, $month) = explode('.', $yearMonthStr);
    
    // 如果当前年份还没在分组数组里,先初始化一个空数组
    if (!isset($groupedData[$year])) {
        $groupedData[$year] = [];
    }
    
    // 避免重复添加同一个月份(如果你的数据有重复的话,没有重复可以去掉这个判断)
    if (!in_array($month, $groupedData[$year])) {
        $groupedData[$year][] = $month;
    }
}

// 对年份进行严格排序,确保输出是按年份顺序来的
ksort($groupedData);

第二步:循环输出前端分组列表

现在$groupedData已经是按年份排序好的结构了,直接循环它生成对应的<ul>和<li>标签就行,还可以给月份也排个序:

// 循环输出HTML结构
foreach ($groupedData as $year => $months) {
    // 先输出年份标题(可以根据你的UI需求调整标签,比如用<h2>、<h3>都可以)
    echo "<h3>{$year}年</h3>";
    echo "<ul>";
    
    // 对当前年份的月份进行排序,确保从1月到12月的顺序
    sort($months);
    
    foreach ($months as $month) {
        echo "<li>{$month}月</li>";
    }
    echo "</ul>";
}

关键说明

  • reset($item):因为每个$item是只有一个键的数组,用这个函数可以直接取出对应的值,不用写那个长长的SQL函数键名,更简洁。
  • ksort($groupedData):对年份键进行升序排序,保证输出的年份是严格按从小到大的顺序排列。
  • sort($months):对每个年份下的月份进行排序,避免出现月份乱序的情况。
  • 去重判断:如果你的原始数据不会出现重复的年月,可以去掉!in_array(...)的判断,提升一点效率。

内容的提问来源于stack exchange,提问作者Tommy Riley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:00:37