2014-01-25 37 views
0

我目前有一個DateTimes數組,代表事件的日期。我試圖找到每週重複的事件並將它們組合在一起。PHP Group每週活動

例如:

2014-01-27T00:00:00+01:00 
2014-02-03T00:00:00+01:00 
2014-02-10T00:00:00+01:00 
2014-02-17T00:00:00+01:00 
2014-04-28T00:00:00+02:00 
2014-05-05T00:00:00+02:00 

將被分成:

2014-01-27T00:00:00+01:00 
2014-02-03T00:00:00+01:00 
2014-02-10T00:00:00+01:00 
2014-02-17T00:00:00+01:00 

2014-04-28T00:00:00+02:00 
2014-05-05T00:00:00+02:00 

我目前通過從數組的開頭,然後加入7天的日期,循環做這個通過整個陣列來查看是否有任何匹配。如果發現匹配,我將它添加到堆棧並重復該過程。

有沒有更簡單的方法來解決這個問題?


實際代碼:

$dateGroups = array(); 

    while(!empty($remainingDates)) { 

     // Get the first item 
     $startDate = array_shift($remainingDates); 

     $currentDate = $startDate; 
     $repeatCount = 1; 

     foreach($remainingDates as $key => $date) { 
      $interval = $currentDate->diff($date); 
      if($interval->d == 7) { 
       unset($remainingDates[$key]); 
       $repeatCount++; 
       $currentDate = clone $date; 
      } 
     } 
     $endDate = $currentDate; 

     $dateGroups[] = array('start' => $startDate, 'end' => $endDate, 'occurrences' => $repeatCount); 

    } 
+2

當您使用它時,一個小的優化將從原始數組中移除該元素,以便您的數組在隨後的搜索中變得更小。 – jeroen

+0

@ jeroen好點,我想我可以將元素關掉 –

+0

或者當你在中間的某個地方找到比賽時取消設置;在第一次循環之後,您的原始示例數組僅包含剩餘的2個項目。 – jeroen

回答

1

退房此功能在PHP http://www.php.net/manual/en/datetime.diff.php

它給你,你可以掃描其他日期,發現7天差異兩個日期之間的差異(或獲得$ diff-> d%7 == 0),然後按組進行分組。

最終,使用%7 == 0預分類到組的表中,然後檢查這些組的完整性,如果需要只有每週發生的日期。應該加快。