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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:54:23