将时间范围合并到一个时间范围的PHP

时间:2016-10-02 21:20:44

标签: php mysql arrays merge

我有一些结果例如:

10:00 - 10:00
11:00 - 11:00
12:00 - 12:00
13:00 - 13:00
17:00 - 17:00
18:00 - 18:00 
19:00 - 19:00
20:00 - 20:00

我想将所有这些时间范围合并为一个或多个时间范围。 所以在这种情况下输出必须是:

10:00 - 13:00
17:00 - 20:00

我尝试将所有这些结果推送到数组中,然后检查每个数组值,如果最后一个数组值与当前数组值相同 - 60 * 60(一小时),如果是 - >>合并时间

但是使用这种方法我无法获得2个或更多的时间范围。

有人有想法吗? 我使用MySQLi和PHP。

1 个答案:

答案 0 :(得分:0)

编辑新:我发现自己是一个答案。

对于那些想知道我是怎么做的人。

  1. 一直以来
  2. 检查上次是否等于当前时间 - 1小时(因此这将是下一个小时)
  3. 如果是 - >删除最后一个数组值
  4. 如果不是 - >这意味着存在最小2小时的间隙,因此接近时间范围(推送最后一个数组值)
  5. 现在您有一个包含所有时间范围Array ( [0] => 04:00 [1] => 04:00 [2] => 09:00 [3] => 14:00 [4] => 18:00 [5] => 20:00 )
  6. 的数组
  7. 将数组切片为2,使用for循环计数(数组)次。
  8. 然后你有特定的时间范围。
  9. 我很难解释一些东西,对不起,我很抱歉。 我的代码现在:

    $last_v = null;
    $array_times = array();
    

    - $ van_besch =数据库获取值 -

    if (strtotime($last_v) == (strtotime($van_besch) - 60*60)) {
             array_pop($array_times);
    
        }else{
            array_push($array_times, $van_besch);
        }
    
        $last_v = $van_besch;
    
    array_push($array_times, $van_besch);
    

    如果每个值都被推入数组中。切片:

    for ($i =0; $i < count($array_times); $i = $i + 2) {
        $new_array_1 = array_slice($array_times, $i, 2);
    $van_new = $new_array_1[0];
    $tot_new = $new_array_1[1];
    
    
    if (strtotime($van) <= strtotime($tot) && strtotime($van_new) <= strtotime($tot_new) && strtotime($van) < strtotime($tot_new) && strtotime($tot) > strtotime($van_new)) {
            $error ='<div style="background-color:#ffccba; border:2px solid #d63301; border-radius:3px; color:#d63301;  padding:5px;">Tijd '.$van_new.' - '.$tot_new.' niet beschikbaar!</div>';
        }
    }
    

    我很高兴我自己找到了解决方案(: