2011-05-01 55 views
0

我有一個顯示事件的網站;每個事件可以有x個日期(無限制)。 我需要在主頁上顯示最接近今天日期的事件。通過n個日期訂購商品並獲取距離最近的日期

這應該是一件不容易的事情,但它由於某種原因不起作用。任何幫助,將不勝感激。

所以這裏是我的功能,選擇主要事件。事件先前已從數據庫中提取,鏈接日期存儲在關鍵「日期」下。它們通過參數「$ events」傳遞給函數。 每個日期都是作爲(int)unix日期。

function getMainEvent(&$events){ 
    $today = time(); 
    $currentEvent = end($events); //selecting the last entered event (most likely to be the main event) 
    $currentEventLast = max($currentEvent['dates']); //selecting the highest date linked to that event 
    foreach($events as $k=>&$event){ //looping through events 
     $date = min($event['dates']); //selecting the lowest date for the current event 
     if($date>$today && $date<$currentEventLast){ 
     //if $date is higher than today (so it's not in the past), but lower than main event's date... 
      $currentEvent = &$event; //make that event the main event 
      $currentEventLast = max($currentEvent['dates']); //select the latest date of that event 
     } 
    } 
    return $currentEvent; 
} 
+0

您是否必須在PHP中對$ events結構按原樣執行此操作,或者您是否可以修改SQL查詢以僅爲您提供所需的事件? – Thilo 2011-05-01 19:33:06

+0

不,我可以查詢數據庫,但由於我無論如何都將所有事件列在底部,我寧願只是使用它。這不是一個性能的事情(這是一個非常小的網站,兩個數據庫調用幾乎不會成爲問題),所以如果你有一個想法,我可以去查詢,但我寧願在PHP中這樣做,如果只是爲了學習。 – Xananax 2011-05-03 07:27:27

回答

0

該算法似乎有許多問題。

  • 在函數的開始處(循環之前),您將$currentEventLast設置爲「上次輸入事件」的最高日期。如果「上次輸入的事件」只有過去的日期,會發生什麼情況?
  • 在每次通過循環時,將$date設置爲當前事件的最低日期。如果這個日期過去會發生什麼?
  • 在每次通過循環時,如果if條件爲真,則將$currentEventLast設置爲當前事件的最新日期。但是,您不應該將它設置爲您在if條件下考慮的日期嗎?
  • 不是一個關鍵問題,但是:如果一個事件的日期是今天的日期會發生什麼?變量$time包含一個時間戳。如果是午夜一秒,那麼今天發生的事件將被您的功能判斷爲「過去」。
+0

非常感謝您花時間回答。事實上,你提出了有趣的問題。讓我試着回答,你告訴我,如果我思考是否正確: _如果「last」只有過去的日期,會發生什麼?_ 嗯,我想如果剩餘的funcion工作,這應該不是一個問題。我可以從列表中選擇任何隨機事件,這只是一個起點 ; _每次通過...如果該日期過去會發生什麼?_ &_你不應該將它設置爲日期...如果條件?_ 應該用max($ dates)來代替,你認爲? – Xananax 2011-05-03 07:38:02

+0

至於最後一點,是的,你是正確的,但我可以稍後糾正,一旦我的algorythm的邏輯是健全的 – Xananax 2011-05-03 07:40:01