douqian4411 2013-09-02 08:27
浏览 8
已采纳

如何获得时间与给定多次之间的间隔重叠?

i have below array

 Array
(
    [0] => Array
        (
        [from_time] => 15:00
        [to_time] => 17:15
    )

[1] => Array
    (
        [from_time] => 10:00
        [to_time] => 12:15
    )

[2] => Array
    (
        [from_time] => 09:00
        [to_time] => 11:15
    )

[3] => Array
    (
        [from_time] => 09:00
        [to_time] => 11:15
    )

[4] => Array
    (
        [from_time] => 14:00
        [to_time] => 16:15
    )

[5] => Array
    (
        [from_time] => 15:00
        [to_time] => 17:15
    )

)

i want to get common time in this array.

If i Find common time in this array my expected result should be

Array
    (
        [0] => Array
            (
            [from_time] => 10:00
            [to_time] => 11:15
        )

    [1] => Array
        (
            [from_time] => 15:00
            [to_time] => 16:15
        )
)

I have try with below code but not getting accurate result.

foreach ($booking_time as $time1) {
    foreach ($booking_time as $time2) {
        {
          if(($time1['from_time'] > $time2['from_time'] && $time1['from_time'] < $time2['to_time'])|| ( $time1['to_time'] > $time2['from_time']  && $time1['to_time'] < $time2['to_time'])){
                echo $time1['from_time'];
                 echo $time1['to_time']; 
        }
        }
    }
}
  • 写回答

3条回答 默认 最新

  • drqja5919276 2013-09-02 09:54
    关注

    Quick example (I think it can be shorter, but for quick understanding it is ok) :

    $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);
    

    Output :

    Array
    (
        [0] => Array
            (
                [from_time] => 15:00
                [to_time] => 16:15
            )
        [1] => Array
            (
                [from_time] => 10:00
                [to_time] => 11:15
            )
    )
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值