Level 7
Found the answer
function mergeDateRanges($ranges)
{
$retVal = [];
//sort date ranges by begin time
usort($ranges, function ($a, $b) {
return strcmp($a['StartDate'], $b['StartDate']);
});
$currentRange = [];
foreach ($ranges as $range) {
// bypass invalid value
if ($range['StartDate'] >= $range['EndDate']) {
continue;
}
//fill in the first element
if (empty($currentRange)) {
$currentRange = $range;
continue;
}
if ($currentRange['EndDate'] < $range['StartDate']) {
$retVal[] = $currentRange;
$currentRange = $range;
} elseif ($currentRange['EndDate'] < $range['EndDate']) {
$currentRange ['EndDate'] = $range['EndDate'];
}
}
if ($currentRange) {
$retVal[] = $currentRange;
}
return $retVal;
}