如何基于日期和时间实现网页内容自动更新 适配网络电台节目展示场景
PHP实现按时间自动展示电台当前播放节目
实现方案选择
你可以根据自己的节目更新频率选两种方案:
方案一:数组存储方案(你当前选用的,适合节目固定的场景)
该方案无需配置数据库,部署简单,修改节目时直接调整数组内容即可。你已修复的分钟匹配逻辑是正确的,这里给出优化后的完整可运行代码,修复了原代码中printf放在循环内会多次输出的问题:
<?php // 先设置正确的时区,替换为你电台所在的时区 date_default_timezone_set('Asia/Shanghai'); // 节目配置数组,键为星期几(1=周一,7=周日),值为[开始时间=>节目名]的数组,时间按升序排列 $shows = [ // 周三的节目示例 3 => [ '20:00' => 'Test result A', '20:30' => 'Test result B', '21:00' => 'Test result C', '21:10' => 'Test result D', '21:30' => 'Test result E' ], // 周一到周五的早间节目示例 1 => [ '08:00' => 'The Breakfast Show', '10:00' => 'The Fred and Lucy Hour' ], 7 => [ '18:00' => 'The Hymn Hour' ] ]; $weekday = date('N'); $current_time = date('H:i'); $now_playing = '默认节目'; // 只有当前星期有配置节目时才遍历 if (isset($shows[$weekday])) { foreach ($shows[$weekday] as $start_time => $show_name) { if ($start_time <= $current_time) { $now_playing = $show_name; } } } printf("正在播出:%s", $now_playing); ?>
注意事项:
- 所有节目开始时间必须按从早到晚的升序排列,才能匹配到最近的开播节目
- 如果需要实时更新不需要用户刷新页面,可以加一段JS代码定时请求这个节目接口更新页面展示内容
方案二:SQL数据库存储方案(适合节目更新频繁、需要后台管理的场景)
如果后续节目量变大,调整频繁,用数组修改太麻烦,可以切换到数据库方案,步骤如下:
- 新建节目表,参考SQL结构:
CREATE TABLE radio_shows ( id INT AUTO_INCREMENT PRIMARY KEY, weekday TINYINT NOT NULL COMMENT '1=周一,7=周日', start_time TIME NOT NULL COMMENT '节目开始时间', show_name VARCHAR(100) NOT NULL COMMENT '节目名称', is_active TINYINT DEFAULT 1 COMMENT '是否生效' );
- PHP连接数据库查询当前节目示例:
<?php date_default_timezone_set('Asia/Shanghai'); $weekday = date('N'); $current_time = date('H:i:s'); $now_playing = '默认节目'; // 连接数据库,替换为你自己的数据库配置 $pdo = new PDO('mysql:host=localhost;dbname=你的库名;charset=utf8', '用户名', '密码'); $stmt = $pdo->prepare("SELECT show_name FROM radio_shows WHERE weekday = ? AND start_time <= ? AND is_active = 1 ORDER BY start_time DESC LIMIT 1"); $stmt->execute([$weekday, $current_time]); $res = $stmt->fetchColumn(); if ($res) { $now_playing = $res; } printf("正在播出:%s", $now_playing); ?>
内容的提问来源于stack exchange,提问作者David CA
相关产品推荐
相关产品推荐

