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

如何同时显示数组键与值?PHP生成营业时间列表遇阻

解决PHP动态营业时间列表的显示与高亮问题

我来帮你搞定这个问题!你的代码现在无输出,主要是因为遍历关联数组的方式错误,另外也没正确实现当前日期的高亮逻辑。下面一步步给你修正:

核心问题分析

  • 关联数组遍历错误:你的$openingHours是字符串键名的关联数组(比如sunday、monday),但用了for循环按数字索引$x去访问,这在关联数组里是无效的,直接导致没有输出。
  • 当前日期获取错误:你写的date('w', strtotime('Sunday'))永远返回0(星期日),应该直接用date('w')获取今天的星期数字(0=周日,1=周一…6=周六)。
  • 未正确显示键名:原代码没拿到数组的键名(比如wednesday),自然无法显示星期名称。

修正后的完整代码

<ul>
<?php
// 获取今天的星期数字(0=周日,1=周一,…6=周六)
$today = date('w');

// 定义营业时间(键名对应星期数字的映射:0=>sunday,1=>monday...)
$openingHours = [
    "sunday" => ["Closed"],
    "monday" => ["Closed"],
    "tuesday" => ["8.30 am - 3.00 pm"],
    "wednesday" => ["8.30 am - 1.30 pm", "2.00 pm - 7.00 pm"],
    "thursday" => ["8.30 am - 0.30 pm", "2.00 pm - 7.00 pm"],
    "friday" => ["8.30 am - 0.30 pm", "1.00 pm - 6.00 pm"],
    "saturday" => ["8.30 am - 2.00 pm"]
];

// 创建星期名称和数字的映射,方便匹配高亮
$weekDaysMap = [
    0 => "sunday",
    1 => "monday",
    2 => "tuesday",
    3 => "wednesday",
    4 => "thursday",
    5 => "friday",
    6 => "saturday"
];

// 遍历营业时间数组,同时拿到键名(星期)和对应时间
foreach ($openingHours as $dayName => $times) {
    // 判断当前遍历的星期是否是今天,是的话添加高亮类
    $highlightClass = (array_search($dayName, $weekDaysMap) == $today) ? 'highlight-current-day' : '';
    
    // 把键名转换成首字母大写的友好显示名称(比如sunday→Sunday)
    $displayDayName = ucfirst($dayName);
    
    // 输出主列表项(显示星期名称和第一时间段)
    echo '<li class="list-unstyled-item d-flex ' . $highlightClass . '">' . $displayDayName . '<span class="ml-auto">' . $times[0] . '</span></li>';
    
    // 如果有第二个时间段,单独输出
    if (isset($times[1])) {
        echo '<li class="list-unstyled-item d-flex ' . $highlightClass . '"><span class="ml-auto">' . $times[1] . '</span></li>';
    }
}
?>
</ul>

关键改进点说明

  • 用foreach遍历关联数组:foreach ($openingHours as $dayName => $times)可以直接拿到每个星期的键名($dayName)和对应的时间数组($times),完美解决显示键名的需求。
  • 实现当前日期高亮:通过$weekDaysMap把星期数字和数组键名关联起来,用array_search找到当前遍历的$dayName对应的数字,和今天的$today对比,匹配就添加highlight-current-day类(你可以自己定义这个类的CSS样式,比如背景色、字体加粗)。
  • 友好的星期名称显示:用ucfirst($dayName)把小写的键名转换成首字母大写的格式(比如sunday→Sunday),更美观。
  • 容错性处理:保留了原代码中对第二个时间段的判断,确保只有存在时才输出。

补充CSS高亮样式(可选)

如果你还没定义高亮样式,可以加这段CSS:

.highlight-current-day {
    background-color: #f0f8ff;
    font-weight: bold;
    border-left: 3px solid #2196f3;
}

内容的提问来源于stack exchange,提问作者Sebastian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:09:48