我从数据库中获取哪些日期已被预订时遇到问题。
示例预订时间为:08:00:00和10:00:00,我想显示13:00:00和15:00:00的免费时间
但它给了我10:00 13:00 15:00 08:00 10:00 15:00作为空闲时间。
$ch = $db->execute("SELECT `time` FROM `calendar` WHERE `date` = '2015-01-08'");
while(list($time) = $db->fetch($ch)) {
if($time != "08:00:00") { echo"<option value=\"08:00\">08:00</option>"; }
if($time != "10:00:00") { echo"<option value=\"10:00\">10:00</option>"; }
if($time != "13:00:00") { echo"<option value=\"13:00\">13:00</option>"; }
if($time != "15:00:00") { echo"<option value=\"15:00\">15:00</option>"; }
}
答案 0 :(得分:0)
这可能是一个逻辑问题吗?
看起来您的查询会带回该日期的所有时间
因此,如果它返回的第一个值为08:00:00
,则所有其他3个ifs将echo
。
echo"<option value=\"10:00\">10:00</option>";
echo"<option value=\"13:00\">13:00</option>";
echo"<option value=\"15:00\">15:00</option>";
但它将为所有返回的times
执行相同的逻辑,因此您看到重复的时间。
您可以尝试将所有options
添加到数组中。然后循环返回值时,如果它等于返回值,则从数组中删除该项
这样您最终只得到free times
。
这是一些伪代码,可以让您了解可能的解决方案
timeArray = [08:00, 10:00, 13:00, 15:00]
$ch = $db->execute("SELECT `time` FROM `calendar` WHERE `date` = '2015-01-08'");
while(list($time) = $db->fetch($ch)) {
//If item is found, remove it from 'free time array'
found = find_in_array(timeArray, returnedTime)
if (found > 0) {
remove_item_from_array( timeArray, found )
}
}
timeArray现在应该只包含(13:00,15:00)