将PHP多维营业时间数组转换为按日展示的HTML表格
PHP多维数组转营业时间HTML表格方案
给定如下PHP多维数组,需要将其中的营业时间数据展示为HTML表格,要求每周的每一天对应其营业时间段数生成行(多段时间则星期单元格跨行),无营业时间时显示“休息”。
$times = [ "opening_time" => [ "monday" => ["10:30 am", "6:30 pm"], "tuesday" => ["12:30 pm"], "wednesday" => ["4:30 pm"], "thursday" => ["2:30 pm"], "friday" => ["4:00 pm"], "saturday" => ["6:00 am"], "sunday" => [] ], "closing_time" => [ "monday" => ["6:00 pm", "10:30 pm"], "tuesday" => ["7:00 pm"], "wednesday" => ["10:00 pm"], "thursday" => ["6:30 pm"], "friday" => ["11:00 pm"], "saturday" => ["6:00 pm"], "sunday" => [] ] ];
解决方案代码
<?php $times = [ "opening_time" => [ "monday" => ["10:30 am", "6:30 pm"], "tuesday" => ["12:30 pm"], "wednesday" => ["4:30 pm"], "thursday" => ["2:30 pm"], "friday" => ["4:00 pm"], "saturday" => ["6:00 am"], "sunday" => [] ], "closing_time" => [ "monday" => ["6:00 pm", "10:30 pm"], "tuesday" => ["7:00 pm"], "wednesday" => ["10:00 pm"], "thursday" => ["6:30 pm"], "friday" => ["11:00 pm"], "saturday" => ["6:00 pm"], "sunday" => [] ] ]; // 星期英文转中文映射 $weekDays = [ 'monday' => '星期一', 'tuesday' => '星期二', 'wednesday' => '星期三', 'thursday' => '星期四', 'friday' => '星期五', 'saturday' => '星期六', 'sunday' => '星期日' ]; // 生成HTML表格 echo '<table border="1" cellpadding="8" cellspacing="0">'; echo '<tr><th>星期</th><th>开门时间</th><th>关门时间</th></tr>'; foreach ($weekDays as $enDay => $cnDay) { $openTimes = $times['opening_time'][$enDay]; $closeTimes = $times['closing_time'][$enDay]; $segmentCount = max(count($openTimes), count($closeTimes)); if ($segmentCount === 0) { // 当天无营业时间,显示休息 echo "<tr>"; echo "<td>{$cnDay}</td>"; echo "<td colspan='2'>休息</td>"; echo "</tr>"; } else { // 遍历每一段营业时间 for ($i = 0; $i < $segmentCount; $i++) { echo "<tr>"; // 仅第一行显示星期并设置跨行 if ($i === 0) { echo "<td rowspan='{$segmentCount}'>{$cnDay}</td>"; } // 取出对应时间段的开门、关门时间,不存在则为空 $open = $openTimes[$i] ?? ''; $close = $closeTimes[$i] ?? ''; echo "<td>{$open}</td>"; echo "<td>{$close}</td>"; echo "</tr>"; } } } echo '</table>'; ?>
代码说明
- 定义
$weekDays数组实现星期英文到中文的转换,适配中文阅读场景 - 遍历每一天时,计算当天的营业时间段数(取开门、关门时间数组长度的最大值)
- 无营业时间时,直接生成一行显示“休息”
- 有多段营业时间时,第一行的星期单元格通过
rowspan属性跨行,后续行仅填充对应时间段的开门、关门时间
内容的提问来源于stack exchange,提问作者Sylvester Loh
相关产品推荐
相关产品推荐

