2017-01-24 4 views
-1

Я хочу групповой массив значений мой массив выглядит, как показано ниже с 30 минут промежуток времениГруппировка массив на основе значений

$arr = ["00:00","00:30","01:00","01:30","02:00","02:30","03:00","04:30","05:00","05:30"]; 

я хочу выход как

Array ([0] => Array ([0] => 00:00 [1] => 03:00),[1]=> Array ([0] => 04:30 [1] => 05:30)) ; 

Вот мой код для достижения результат

$output = array(); 
$start = $arr[0]; 
for($i=1; $i<count($arr); $i++) { 
    if($i == count($arr)-1) { 
     $interval = array($start,$arr[$i]); 
     array_push($output,$interval); 
     break; 
    } 
    if((int)($arr[$i]) - (int)($arr[$i-1]) > 1) { 
     $interval = array($start,$arr[$i-1]); 
     array_push($output,$interval); 
     $start = $arr[$i]; 
    } 
} 
print_r($output); 

, но я получил результат выглядит

Array ([0] => Array ([0] => 00:00 [1] => 05:30)) 

Благодаря

+0

Вы хотите сгруппировать с интервалом 3 часа? – Abbas

+0

нет Аббас. Я хочу группировать значения массива с начальным и конечным временем с интервалом 30 минут, если какое-либо время превышает 30 минут, он будет рассматриваться как новый массив. –

+0

Пожалуйста, проверьте ответ. – Abbas

ответ

1
$times = ["00:00","00:30","01:00","01:30","02:00","02:30","03:00","04:30","05:00","05:30"]; 

$result = array(); 

$index = 0; 
for ($i=0; $i < count($times); $i++){ 
    if($i == 0){ 
     $result[$index][] = $times[$i]; 
    }elseif($i == count($times)-1){ 
     $result[$index][] = $times[$i]; 
    }else{ 
     if((h2m($times[$i])-h2m($times[$i-1])) > 30){ 
      $result[$index][] = $times[$i-1]; 
      $index++; 
      $result[$index][] = $times[$i]; 
     } 
    } 
} 

var_dump($result); 


FUNCTION h2m($hours) { 
    $t = EXPLODE(":", $hours); 
    $h = $t[0]; 
    IF (ISSET($t[1])) { 
     $m = $t[1]; 
    } ELSE { 
     $m = "00"; 
    } 
    $mm = ($h * 60) + $t[1]; 
    RETURN $mm; 
} 
+0

Надеюсь, это сработает для вас. – Abbas

+0

спасибо, что abbas.its работает нормально –

Смежные вопросы