我正在尝试创建一个显示商店开业情况的脚本。我想把这些空缺一一列在下面。例如,如果周一、周二和周三的开放时间完全相同,我希望其分组如下:
周一至周三:12:00-15:00
星期四:13:00-15:00
星期五:10:00-18:00
星期六:12:00-18:00
周日:14:00-18:00
当逐工作日输出时,它工作得很好,但我不知道如何在相同的开放时间对工作日进行"分组"。
我尝试过使用if($time == $time)
,但没有成功。我没有任何其他想法如何做到这一点。
我不想从表本身获取工作日名称。这就是为什么我创建了$weekdays array
,这样我就可以直接在代码中更改工作日名称。
我还需要将工作日的名称和开放时间放在不同的跨度中。
这是我的SQL表:
ID | mon | tue | wed | thu | fri | sat | sun
1 12:00-15:00 12:00-15:00 12:00-15:00 13:00-15:00 10:00-18:00 12:00-18:00 14:00-18:00
这是我当前的PHP代码:
$get_openings = mysql_query("SELECT * FROM openings WHERE NC_Id='1'");
while($days = mysql_fetch_array($get_openings)) {
// Loads time only from database
$mon = $days['mon'];
$tue = $days['tue'];
$wed = $days['wed'];
$thu = $days['thu'];
$fri = $days['fri'];
$sat = $days['sat'];
$sun = $days['sun'];
$weekdays = array('monday','tuesday','wednesday','thuesday','friday','saturday','sunday');
$times = array($mon,$tue,$wed,$thu,$fri,$sat,$sun);
$i = 0;
foreach($times as $time) {
while ($i <= 6) {
if($time == "") {
echo $weekdays[$i++].": "."Closed<br>";
}
else {
echo $weekdays[$i++].": ".$time."<br>";
}
}
}
}
有人能帮帮我吗?
谢谢-Jesper
1)在while循环之外定义$weekdays
,因为它不会更改
2) 定义$mon
、$tue
。。。然后在$times中再次收集它们是没有意义的。您可以直接使用fetch语句中的命名数组。
$weekdays = array('mon','tue','wed','thu','fri','sat','sun');
$get_openings = mysql_query("SELECT * FROM openings WHERE NC_Id='1'");
while($days = mysql_fetch_array($get_openings)) {
$result = array();
foreach($weekdays as $day){
$time = $days[$day]==''?'closed':$days[$day];
if(count($result)>0 and $result[0][1]==$time){
$result[0][0] = substr($result[0][0],0,3) . '-' . $day;
} else {
array_unshift($result,array($day,$time));
}
}
$result = array_reverse($result);
/* add code to display $result here */
}
在每个循环中,$result
是一个包含日期名称和打开时间的数组数组。例如:array(array('mon-wed','12:00-15:00'),array('thu',...),...)
*/
这样试试:
$previous_time = null;
$previous_day = null;
$consequetive = 0;
while($days = mysql_fetch_assoc($get_openings)) { // loop through your rows
$days[''] = null;
foreach ($days as $day => $time) { // loop through your fields
if ($day != "id") { // skip the `id` field
if ($previous_time !== $time) {
echo $consequetive > 0 ? $previous_day : "";
echo $previous_day ? ": " : "";
echo $previous_time === "" ? "Closed" : $previous_time;
echo $previous_day && $day ? "<br>" : "";
echo $day;
$consequetive = 0;
}
else {
echo ++$consequetive == 1 ? " - " : "";
}
$previous_time = $time;
$previous_day = $day;
}
}
}