php
  • mysql
  • time
  • 2015-01-07 23 views 0 likes 
    0

    我有一個從數據庫獲取數據的問題,哪些日期被預訂。保留時間(日曆)返回錯誤的值。

    例如預約時間是: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

    做你的建議幫助? – morne

    回答

    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)

    +0

    ,因爲您可以在一天內預訂uniq時間。可以說08:00:00,所以沒有人會這樣做。 1次客戶訪問1次。 – saul

    +0

    所以最新的錯誤。 print_r給我兩個array() array([0] =>'08:00:00',[time] =>'08:00:00') array([0] =>'10:00: 00',[time] =>'10:00:00') – saul

    +0

    是的,你100%正確。但是你在'While'循環中,所以你對每個返回的值都做同樣的事情。所以在這種情況下'08:00'和'10:00'。 您可以更好地將列表中的所有值都帶回來。然後遍歷該列表並消除找到的選項。 – morne

    相關問題