PHP日期列表优化:合并连续日期并调整输出格式
解决方案
要实现你需要的日期格式输出,我们需要调整list_date函数的两个核心逻辑:将连续日期数字合并为「起始-结束」格式,以及把日期部分的空格替换为「 / 」分隔符。以下是调整后的完整代码:
function list_date($dates) { if (empty($dates)) { return ''; } $days = []; $month = ''; $year = ''; // 拆分每个日期的日、月、年 foreach ($dates as $date) { $parts = explode(' ', $date); if (count($parts) === 3) { $days[] = (int)$parts[0]; $month = $parts[1]; $year = $parts[2]; } } if (empty($days)) { return ''; } // 排序日期,确保连续数字能被正确识别 sort($days); $ranges = []; $currentStart = $days[0]; $currentEnd = $days[0]; // 遍历生成连续日期范围 for ($i = 1; $i < count($days); $i++) { if ($days[$i] === $currentEnd + 1) { $currentEnd = $days[$i]; } else { $ranges[] = $currentStart === $currentEnd ? (string)$currentStart : "$currentStart - $currentEnd"; $currentStart = $days[$i]; $currentEnd = $days[$i]; } } // 添加最后一个日期范围 $ranges[] = $currentStart === $currentEnd ? (string)$currentStart : "$currentStart - $currentEnd"; // 拼接最终格式字符串 $dayString = implode(', ', $ranges); return "Event Schedule $dayString / $month / $year"; } // 测试示例 $testDates = ['1 03 2023', '2 03 2023', '3 03 2023', '7 03 2023', '9 03 2023']; echo list_date($testDates);
关键修改说明:
- 连续日期压缩:通过遍历排序后的日期数组,识别连续数字段,将连续的日期日数合并为「X - Y」格式
- 分隔符替换:最终拼接时,将月和年部分的空格替换为「 / 」分隔符
- 排序处理:先对日期日数排序,避免输入乱序导致连续日期无法被正确识别
运行上述代码后,会输出你期望的格式:Event Schedule 1 - 3, 7, 9 / 03 / 2023。
内容的提问来源于stack exchange,提问作者Toni Rhubanaga
相关产品推荐
相关产品推荐

