Здравствуйте. Есть вот такой скрипт:
$diaposons = array_map(
function($e) { return array('datestart' => strtotime($e->datestart), 'dateend' => strtotime($e->dateend)); },
json_decode('[{"datestart":"2016-12-12","dateend":"2016-12-18"},{"datestart":"2016-12-11","dateend":"2016-12-14"},{"datestart":"2016-12-16","dateend":"2016-12-19"},{"datestart":"2016-12-12","dateend":"2016-12-12"},{"datestart":"2016-12-14","dateend":"2016-12-16"}]')
);
usort($diaposons, function($a, $b) { return $a['datestart'] - $b['datestart']; });
$result = [];
$left = $diaposons[0]['datestart'];
$right = $diaposons[0]['dateend'];
$num = count($diaposons);
$day = 24 * 60 * 60;
for ($i = 3; $i < $num; ++$i) {
if ($diaposons[$i]['datestart'] > $right) {
$right = $diaposons[$i]['dateend'];
continue;
}
$end = min($right, $diaposons[$i]['dateend']);
$result[] = array(
'start' => max($left + $day, $diaposons[$i]['datestart']),
'end' => $end
);
$left = $end;
$right = max($right, $diaposons[$i]['dateend']);
}
foreach ($result as $r) {
for ($i = $r['start']; $i <= $r['end']; $i += $day) {
echo date('Y-m-d', $i), PHP_EOL;
}
}
Где json_decode('[{"datestart":"2016-12-12","dateend":"2016-12-1.... - структура моей базы данных
datestart - дата заезда
dateend - дата выезда
Цель скрипта - найти только те даты, которые повторяются 3 раза. Для наглядности сделал картинку:
3 раза повторяются только вот эти даты: 2016-12-12, 2016-12-14 и 2016-12-16.
Скрипт работает не верно. Он возвращает, почему-то, только 2 даты: 2016-12-14 и 2016-12-16.
2016-12-12 он где-то теряет.
Подскажите, где ошибка? Где теряется первое повторение?