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

reserved time (calendar) gives back bad values.

我在从数据库中获取预订日期的数据时遇到问题。

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

}

会不会是逻辑问题?
看起来你的查询带回了那个日期的所有时间。
因此,如果它的第一个值 returns 是 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 )