현재 이벤트 날짜를 나타내는 DateTimes 배열이 있습니다. 나는 매주 반복되는 이벤트를 찾고 그들을 하나로 묶으려고 노력하고있다. 예를 들어PHP Group Weekly Events
: 저는 현재 다음 날짜에 7 일 추가, 배열의 시작 부분에서 시작 반복하여이 일을 해요
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
로 분할된다 전체 배열을 통해 일치하는 것이 있는지 확인합니다. 일치하는 것이 발견되면 스택에 추가하고 프로세스를 반복합니다.
더 간단한 접근 방법이 있습니까?
실제 코드 :
$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 좋은 지적, 나는 요소를 바꿀 수 있다고 생각한다. –
중간에 어울리는 부분을 발견하면 설정을 해제한다. 첫 번째 루프 후에 orignal 예제 배열에는 나머지 2 개 항목 만 포함됩니다. – jeroen