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

