2013-04-15 87 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 
相关问题