我在从数据库中获取预订日期的数据时遇到问题。
预订时间示例为:08:00:00 和 10:00:00,我想显示免费时间,即 13:00:00 和 15:00:00
但它给了我 10:00 13:00 15:00 08:00 10:0015: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>"; }
}
这可能是逻辑问题吗?
看起来您的查询会返回该日期的所有时间。
因此,如果它返回的第一个值是08:00:00
它将在所有其他 3 个 if 上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 )