2017-02-22 8 views
-1

Рассмотрим следующий мой массив диапазон времени,PHP время находят связь между массивом временного диапазона

Array 
(
    [0] => 00:00-01:00 
    [1] => 01:00-02:00 
    [2] => 02:00-03:00 
    [3] => 03:00-04:00 
    [4] => 04:00-05:00 
    [5] => 05:00-06:00 
    [6] => 06:00-07:00 
    [7] => 07:00-08:00 
    [8] => 08:00-09:00 
    [9] => 09:00-10:00 
    [10] => 10:00-11:00 
    [11] => 11:00-12:00 
    [12] => 12:00-13:00 
    [13] => 13:00-14:00 
    [14] => 14:00-15:00 
    [15] => 15:00-16:00 
    [16] => 16:00-17:00 
    [17] => 17:00-18:00 
    [18] => 18:00-19:00 
    [19] => 19:00-20:00 
    [20] => 20:00-21:00 
    [21] => 21:00-22:00 
    [22] => 22:00-23:00 
) 

и у меня есть результат массив выборки из базы данных,

Array 
(
    [0] => Array 
     (
      [registration_time] => 2:10 
      [count] => 2 
     ) 

    [1] => Array 
     (
      [registration_time] => 5:10 
      [count] => 2 
     ) 

    [2] => Array 
     (
      [registration_time] => 15:30 
      [count] => 6 
     ) 
) 

Я пытаюсь выяснить registration_time в мой массив диапазона времени, но это не работает. Моя стратегия - использовать функциональность array_search(), но она не работает. Я хочу ниже выхода:

Array 
(
    00:00-01:00 => 0 
    01:00-02:00 => 0 
    02:00-03:00 => 2 
    03:00-04:00 => 0 
    04:00-05:00=> 2 
    05:00-06:00=> 0 
    06:00-07:00=> 0 
    07:00-08:00=> 0 
    08:00-09:00=> 0 
    09:00-10:00=> 0 
    10:00-11:00=> 0 
    11:00-12:00=> 0 
    12:00-13:00=> 0 
    13:00-14:00=> 0 
    14:00-15:00=> 0 
    15:00-16:00=> 6 
    16:00-17:00=> 0 
    17:00-18:00=> 0 
    18:00-19:00=> 0 
    19:00-20:00=> 0 
    20:00-21:00=> 0 
    21:00-22:00=> 0 
    22:00-23:00 => 0 
) 
+0

ли мой ответ поможет решить вашу проблему? См. Http://stackoverflow.com/help/someone-answers. Благодаря! – miken32

+0

yes miken32 это очень полезно: спасибо! – bdevloper

ответ

0

Вы можете получить час только от результата массива:

foreach ($Array_from_DB as $value) { 
    $time= strtotime($value.registration_time); 
    $result_array[date('H'),$time]+=$value.count; 
} 

петлевого массивом из базы данных (для каждого элемента), преобразовать его в переменное время, получить только час, а массив результатов будет иметь счетчик всех подсчетов баз данных, после чего вы можете сделать цикл от o до 23, проверьте, не исходит ли isset ($ result_array [$ loopvariable]), поместите счетчик 0 ,

$ arra

0

Вы можете попробовать что-то вроде этого. Сделайте свой диапазон временных интервалов индексированным на количество секунд. Затем преобразовать каждый раз, когда в число секунд и сравнить, какой индекс он соответствует:

$ranges = array(
    60 => array("range"=>"00:00-00:59", "count"=>0), 
    120 => array("range"=>"01:00-01:59", "count"=>0), 
    180 => array("range"=>"02:00-02:59", "count"=>0), 
    // etc 
    1440 => array("range"=>"23:00-23:59", "count"=>0), 
); 
foreach ($registrations as $reg) { 
    $t = explode(":", $reg["registration_time"]); 
    // turn HH:MM into minutes 
    $minutes = ($t[0] * 60) + $t[1]; 
    // round to the nearest 60 
    $minutes = ceil($minutes/60) * 60; 
    $ranges[$minutes]["count"] += $reg["count"]; 
} 

foreach ($ranges as $range) { 
    $output[$range["range"]] = $range["count"]; 
} 
print_r($output); 

Это позволит вам легко менять на другие, чем один час периодов в будущем, если это необходимо.

Если вы всегда будете использовать часы:

$ranges = array(
    0 => array("range"=>"00:00-00:59", "count"=>0), 
    1 => array("range"=>"01:00-01:59", "count"=>0), 
    2 => array("range"=>"02:00-02:59", "count"=>0), 
    // etc 
    23 => array("range"=>"23:00-23:59", "count"=>0), 
); 
foreach ($registrations as $reg) { 
    list($h, $m) = explode(":", $reg["registration_time"]); 
    $ranges[$h]["count"] += $reg["count"]; 
} 
foreach ($ranges as $range) { 
    $output[$range["range"]] = $range["count"]; 
} 
print_r($output);