Вот пример рабочего кода, который выводит:
12 AM - 05 AM, 06 AM - 04 PM
Вы можете использовать это или отредактировать, чтобы работать так, как вы хотите:
<?php
$testArray = array
(
'12 AM - 01 AM',
'01 AM - 02 AM',
'02 AM - 03 AM',
'03 AM - 04 AM',
'04 AM - 05 AM',
'06 AM - 07 AM',
'07 AM - 08 AM',
'08 AM - 09 AM',
'09 AM - 10 AM',
'10 AM - 11 AM',
'11 AM - 12 PM',
'12 PM - 01 PM',
'01 PM - 03 PM',
'03 PM - 04 PM'
);
$now = time();
foreach($testArray as $trange){
$matches = array();
preg_match_all('/(\d+ (?:A|P)M) - (\d+ (?:A|P)M)/', $trange, $matches);
if(!isset($start)){
$start = $matches[1][0];
$end = $matches[2][0];
}else if(strtotime($end, $now) === strtotime($matches[1][0], $now))
$end = $matches[2][0];
else{ // End time not equal to previous start time
echo $start , ' - ' , $end, ', ';
$start = $matches[1][0];
$end = $matches[2][0];
}
}
echo $start , ' - ' , $end;
?>