2013-04-15 89 views
0

我試圖能夠計算特定場所的特定日期(今天)的總事件。 使用24小時制時間, 我試圖在foreach循環中查找當天的最後一個事件,然後當一天的最後一個事件的end_time小於現在時,顯示文本「所有安排的事件已經爲今天結束」。php count並獲得foreach循環中的最後一條記錄

我的問題是,xml數據包括所有房間的所有事件14天,我沒有得到正確的計數。 我有幾個,如果在foreach中的語句以削減下來....

如果XML空間ID ==房間ID,然後 如果XML事件起始日期今天等於,然後 如果($ I $ < numItems的) 如果事件結束時間大於現在, 顯示這些事件

我需要記錄的計數在滿足這些條件......當事件是今天的日期,並在同一個房間作爲被通通過roomID網址。 把我的$一個numItems = $計數($ ARR)之前在foreach計算太多記錄,並把內部的foreach計數總是返回只算1。

$arr = $this->data['events']; 
$numItems = count($arr); 
$i = 1; 
foreach ($arr as $key => $reservation){ 
if ((int)$reservation->space_reservation->space_id == $roomID) 
{ 
//test today's date 
     $resDT = date('m/d/y',strtotime($reservation->reservation_start_dt)); 
     if ($resDT == date('m/d/y')) 
      { 
      if ($i < $numItems) 
      { 
      $repst = substr($reservation->event_start_dt,11,5); 
      $repet = substr($reservation->event_end_dt,11,5); 

       if ((date('H:i',strtotime($repet))) > (date('H:i'))) 
        { 
        echo '<h2>' .$reservation->event_name. '</h2> '; 
        echo '<span class="dates">' .date('m/d/y',strtotime($reservation->event_start_dt)). ' </span> '; 
        echo '<span class="times">' .date('g:i a',strtotime($repst)). ' - '; 
        echo date('g:i a',strtotime($repet)). '</span> '; 
        echo '<br />'; 
        } // ends if event end date has passed 

      //echo '<span style="color:#FFF200;">'.$i.'</span>'; 
      echo '<br />'; 
      } 
//if $i equals last record 
      elseif ($i === $numItems) { 
       // test if last event ends show 
       if ((date('g:i a',strtotime($repet))) < (date('g:i: a'))){ 
       echo '<span style="color:#FFF200;">All scheduled meetings/events have concluded for today. </span><br /><br />'; 
       } 
      } 
      $i++; 
      } // ends if 

    } // ends if 
} // ends for each 

回答

1

下面的代碼將打印的其中之一:

  1. 所有未完成的事件今天只有定房;
  2. 「所有預定的活動都已在今天結束。」如果沒有剩下的話。

我加了兩個計數器你能夠使用,你需要:

  • $ totalEventsToday - 計數原定於今天在定房的所有事件;
  • $ unfinishedEventsToday - 計數原定於今天在其結束日期/時間尚未通過定房的事件。

所以這裏的代碼:

$today     = date('m/d/y'); 
$events    = $this->data['events']; 
$totalEventsToday  = 0; 
$unfinishedEventsToday = 0; 

// Check all reservations/events 
foreach ($events as $reservation) { 

    // Process reservation/events for the given room only 
    if ((int) $reservation->space_reservation->space_id == $roomID) 
    { 
     // Process reservation/events for today only 
     $resDT = date('m/d/y', strtotime($reservation->reservation_start_dt)); 
     if ($resDT == $today) 
     { 
      $totalEventsToday++; 

      $repst = substr($reservation->event_start_dt,11,5); 
      $repet = substr($reservation->event_end_dt,11,5); 

      // Process unfinished event 
      if ((date('H:i',strtotime($repet))) > (date('H:i'))) 
      { 
       $unfinishedEventsToday++; 

       echo '<h2>' .$reservation->event_name. '</h2> '; 
       echo '<span class="dates">' .date('m/d/y',strtotime($reservation->event_start_dt)). ' </span> '; 
       echo '<span class="times">' .date('g:i a',strtotime($repst)). ' - '; 
       echo date('g:i a',strtotime($repet)). '</span> '; 
       echo '<br />'; 
      } // ends if unfinished event 
     } // ends if today 
    } // ends if room 
} // ends for each 

// Test if there aren't any unfinished events left for today 
if (!$unfinishedEvents){ 
    echo '<span style="color:#FFF200;">All scheduled meetings/events have concluded for today. </span><br /><br />'; 
} 
+0

這是偉大的。謝謝!你有$ unfinishedEventsToday = 0;這是我改變$ unfinishedEvents稍後匹配的代碼。 – sloga

+0

@sloga,感謝拿起它,只是修正代碼,因此變量名稱將匹配:) –

0

我想我真的不知道您的問題。您可以簡單地添加一個計數器,就像我在下面使用$currentEvents所做的那樣。

$arr = $this->data['events']; 
$numItems = count($arr); 
$currentEvents = 0; 
$i = 1; 
foreach ($arr as $key => $reservation){ 
if ((int)$reservation->space_reservation->space_id == $roomID) 
{ 
//test today's date 
     $resDT = date('m/d/y',strtotime($reservation->reservation_start_dt)); 
     if ($resDT == date('m/d/y')) 
      { 
      if ($i < $numItems) 
      { 
      $repst = substr($reservation->event_start_dt,11,5); 
      $repet = substr($reservation->event_end_dt,11,5); 

       if ((date('H:i',strtotime($repet))) > (date('H:i'))) 
        { 
        $currentEvents++; 
        echo '<h2>' .$reservation->event_name. '</h2> '; 
        echo '<span class="dates">' .date('m/d/y',strtotime($reservation->event_start_dt)). ' </span> '; 
        echo '<span class="times">' .date('g:i a',strtotime($repst)). ' - '; 
        echo date('g:i a',strtotime($repet)). '</span> '; 
        echo '<br />'; 
        } // ends if event end date has passed 

      //echo '<span style="color:#FFF200;">'.$i.'</span>'; 
      echo '<br />'; 
      } 
//if $i equals last record 
      elseif ($i === $numItems) { 
       // test if last event ends show 
       if ((date('g:i a',strtotime($repet))) < (date('g:i: a'))){ 
       echo '<span style="color:#FFF200;">All scheduled meetings/events have concluded for today. </span><br /><br />'; 
       } 
      } 
      $i++; 
      } // ends if 

    } // ends if 
} // ends for each 
相關問題