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);
}
當您使用它時,一個小的優化將從原始數組中移除該元素,以便您的數組在隨後的搜索中變得更小。 – jeroen
@ jeroen好點,我想我可以將元素關掉 –
或者當你在中間的某個地方找到比賽時取消設置;在第一次循環之後,您的原始示例數組僅包含剩餘的2個項目。 – jeroen