保留时间(日历)返回错误值。

时间:2015-01-07 06:50:47

标签: php mysql time

我从数据库中获取哪些日期已被预订时遇到问题。

示例预订时间为: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>"; }

}

1 个答案:

答案 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)