3v4l.org

run code in 300+ PHP versions simultaneously
<?php $intervals = [ ['from_time' => '15:00', 'to_time' => '17:15'], ['from_time' => '10:00', 'to_time' => '12:15'], ['from_time' => '09:00', 'to_time' => '11:15'], ['from_time' => '09:00', 'to_time' => '11:15'], ['from_time' => '14:00', 'to_time' => '16:15'], ['from_time' => '15:00', 'to_time' => '17:15'], ]; $overlaps = []; foreach ($intervals as $interval) { $key = null; foreach ($overlaps as $_key => $_intervals) { foreach ($_intervals as $_interval) { if ( ($_interval['from_time'] <= $interval['from_time'] && $interval['from_time'] <= $_interval['to_time']) || ($_interval['from_time'] <= $interval['to_time'] && $interval['to_time'] <= $_interval['to_time']) ) { $key = $_key; break 2; } } } if (is_null($key)) { $key = count($overlaps); } $overlaps[$key][] = $interval; } foreach ($overlaps as &$overlap) { $from = '00:00'; $to = '23:59'; foreach ($overlap as $_interval) { $from = max($from, $_interval['from_time']); $to = min($to, $_interval['to_time']); } $overlap = ['from_time' => $from, 'to_time' => $to]; } unset($overlap); print_r($overlaps);

preferences:
29.92 ms | 406 KiB | 5 Q