如何在PHP中解析JSON并遍历提取日期与时段信息?
如何遍历提取JSON中的日期与时间段信息?
你手里的这个JSON结构是按天组织的,要提取day字段以及对应periods里的start和end时间其实很简单,我给你分语言写几个实用的遍历方案:
PHP 实现
因为你的数据是PHP里的字符串变量,首先得把它转成PHP数组,然后嵌套遍历就行:
<?php $data = '[{"day":0,"periods":[{"start":"01:00","end":"02:00","title":"","backgroundColor":"rgba(254, 0, 0, 0.7)","borderColor":"rgb(42, 60, 255)","textColor":"rgb(0, 0, 0)"},{"start":"02:30","end":"03:00","title":"","backgroundColor":"rgba(254, 0, 0, 0.7)","borderColor":"rgb(42, 60, 255)","textColor":"rgb(0, 0, 0)"}]},{"day":1,"periods":[{"start":"01:00","end":"02:00","title":"","backgroundColor":"rgba(254, 0, 0, 0.7)","borderColor":"rgb(42, 60, 255)","textColor":"rgb(0, 0, 0)"}]},{"day":2,"periods":[{"start":"01:00","end":"01:30","title":"","backgroundColor":"rgba(254, 0, 0, 0.7)","borderColor":"rgb(42, 60, 255)","textColor":"rgb(0, 0, 0)"}]},{"day":3,"periods":[{"start":"02:00","end":"02:30","title":"","backgroundColor":"rgba(254, 0, 0, 0.7)","borderColor":"rgb(42, 60, 255)","textColor":"rgb(0, 0, 0)"}]},{"day":4,"periods":[{"start":"01:00","end":"01:30","title":"","backgroundColor":"rgba(254, 0, 0, 0.7)","borderColor":"rgb(42, 60, 255)","textColor":"rgb(0, 0, 0)"}]},{"day":5,"periods":[{"start":"01:30","end":"02:00","title":"","backgroundColor":"rgba(254, 0, 0, 0.7)","borderColor":"rgb(42, 60, 255)","textColor":"rgb(0, 0, 0)"},{"start":"03:00","end":"03:30","title":"","backgroundColor":"rgba(254, 0, 0, 0.7)","borderColor":"rgb(42, 60, 255)","textColor":"rgb(0, 0, 0)"}]},{"day":6,"periods":[]}]'; // 把JSON字符串转成PHP数组 $schedule = json_decode($data, true); // 遍历每一天的数据 foreach ($schedule as $dayItem) { $day = $dayItem['day']; echo "Day {$day}:\n"; // 检查当前天有没有时间段 if (!empty($dayItem['periods'])) { foreach ($dayItem['periods'] as $period) { echo "- 时间段: 开始 {$period['start']}, 结束 {$period['end']}\n"; } } else { echo "- 无时间段\n"; } echo "\n"; } ?>
这段代码会先把JSON转成关联数组,然后外层循环遍历每一天,内层循环处理当天的所有时间段——哪怕periods是空数组,也会友好提示“无时间段”,不会报错。
JavaScript 实现
如果是在前端或者Node.js里处理,思路一样,先解析JSON再嵌套遍历:
const data = '[{"day":0,"periods":[{"start":"01:00","end":"02:00","title":"","backgroundColor":"rgba(254, 0, 0, 0.7)","borderColor":"rgb(42, 60, 255)","textColor":"rgb(0, 0, 0)"},{"start":"02:30","end":"03:00","title":"","backgroundColor":"rgba(254, 0, 0, 0.7)","borderColor":"rgb(42, 60, 255)","textColor":"rgb(0, 0, 0)"}]},{"day":1,"periods":[{"start":"01:00","end":"02:00","title":"","backgroundColor":"rgba(254, 0, 0, 0.7)","borderColor":"rgb(42, 60, 255)","textColor":"rgb(0, 0, 0)"}]},{"day":2,"periods":[{"start":"01:00","end":"01:30","title":"","backgroundColor":"rgba(254, 0, 0, 0.7)","borderColor":"rgb(42, 60, 255)","textColor":"rgb(0, 0, 0)"}]},{"day":3,"periods":[{"start":"02:00","end":"02:30","title":"","backgroundColor":"rgba(254, 0, 0, 0.7)","borderColor":"rgb(42, 60, 255)","textColor":"rgb(0, 0, 0)"}]},{"day":4,"periods":[{"start":"01:00","end":"01:30","title":"","backgroundColor":"rgba(254, 0, 0, 0.7)","borderColor":"rgb(42, 60, 255)","textColor":"rgb(0, 0, 0)"}]},{"day":5,"periods":[{"start":"01:30","end":"02:00","title":"","backgroundColor":"rgba(254, 0, 0, 0.7)","borderColor":"rgb(42, 60, 255)","textColor":"rgb(0, 0, 0)"},{"start":"03:00","end":"03:30","title":"","backgroundColor":"rgba(254, 0, 0, 0.7)","borderColor":"rgb(42, 60, 255)","textColor":"rgb(0, 0, 0)"}]},{"day":6,"periods":[]}]'; // 解析JSON const schedule = JSON.parse(data); // 遍历每一天 schedule.forEach(dayItem => { console.log(`Day ${dayItem.day}:`); if (dayItem.periods.length > 0) { dayItem.periods.forEach(period => { console.log(`- 时间段: 开始 ${period.start}, 结束 ${period.end}`); }); } else { console.log("- 无时间段"); } console.log("\n"); });
核心逻辑都是外层循环处理每一天,内层循环处理当天的每个时间段,同时判断periods是否为空,避免空数组遍历出错。
内容的提问来源于stack exchange,提问作者Dmitri
相关产品推荐
相关产品推荐

