【问题标题】:PHP Compare 2 Arrays with time rangesPHP比较2个数组和时间范围
【发布时间】:2014-10-31 06:22:28
【问题描述】:

希望有人可以在这里帮助我。 我有 2 个具有给定开始和结束时间的数组。 我需要做的是检查数组 1 的时间范围是否在数组 2 的范围内,如果在范围内,则必须从数组 2 中删除。

数组 1:

Array ( 
      [0] => Array ( [from] => 10:00:00 [to] => 10:30:00 ) 
      [1] => Array ( [from] => 11:00:00 [to] => 11:45:00 )
      [2] => Array ( [from] => 14:00:00 [to] => 15:00:00 ) 
      [3] => Array ( [from] => 16:30:00 [to] => 17:00:00 ) 
)

数组 2:

Array ( 
      [0] => Array ( [from] => 09:30 [to] => 10:00 ) 
      [1] => Array ( [from] => 10:15 [to] => 10:45 ) 
      [2] => Array ( [from] => 11:00 [to] => 11:30 ) 
      [3] => Array ( [from] => 11:45 [to] => 12:15 ) 
      [4] => Array ( [from] => 12:30 [to] => 13:00 ) 
      [5] => Array ( [from] => 13:15 [to] => 13:45 ) 
      [6] => Array ( [from] => 14:00 [to] => 14:30 ) 
      [7] => Array ( [from] => 14:45 [to] => 15:15 ) 
      [8] => Array ( [from] => 15:30 [to] => 16:00 ) 
      [9] => Array ( [from] => 16:15 [to] => 16:45 ) 
      [10] => Array ( [from] => 17:00 [to] => 17:30 ) 
      [11] => Array ( [from] => 17:45 [to] => 18:15 ) 
      [12] => Array ( [from] => 18:30 [to] => 19:00 ) 
      [13] => Array ( [from] => 19:15 [to] => 19:45 ) 
) 

希望有人可以帮助我解决这个问题。 提前感谢您的帮助!

【问题讨论】:

    标签: php arrays time compare range


    【解决方案1】:

    PS:已编辑,因为 OP 提供了更多细节。

    这应该是一条评论,但是:o “声誉!”你做了这个答案!

    您的问题不完整且模棱两可! (更多信息随后添加)

    只需检查每个可用时隙与保留的时隙!如果可用时隙仍然“可用”,则将其添加到临时数组中,最后更新可用时隙数组:

    <?php
    $array1 = Array (
    0 => Array ( 'from' => '10:00:00', 'to' => '10:30:00' ),
    1 => Array ( 'from' => '11:00:00', 'to' => '11:45:00' ),
    2 => Array ( 'from' => '14:00:00', 'to' => '15:00:00' ),
    3 => Array ( 'from' => '16:30:00', 'to' => '17:00:00' ) );
    
    $array2 = Array(
    0 => Array ( 'from' => '09:30', 'to' => '10:00' ),
    1 => Array ( 'from' => '10:15', 'to' => '10:45' ),
    2 => Array ( 'from' => '11:00', 'to' => '11:30' ),
    3 => Array ( 'from' => '11:45', 'to' => '12:15' ),
    4 => Array ( 'from' => '12:30', 'to' => '13:00' ),
    5 => Array ( 'from' => '13:15', 'to' => '13:45' ),
    6 => Array ( 'from' => '14:00', 'to' => '14:30' ),
    7 => Array ( 'from' => '14:45', 'to' => '15:15' ),
    8 => Array ( 'from' => '15:30', 'to' => '16:00' ),
    9 => Array ( 'from' => '16:15', 'to' => '16:45' ),
    10 => Array ( 'from' => '17:00', 'to' => '17:30' ),
    11 => Array ( 'from' => '17:45', 'to' => '18:15' ),
    12 => Array ( 'from' => '18:30', 'to' => '19:00' ),
    13 => Array ( 'from' => '19:15', 'to' => '19:45' ) );
    
    $a2 = array();
    foreach( $array2 as $timeRange2 )
    {
        $a2f = strtotime($timeRange2['from']);
        $a2t = strtotime($timeRange2['to']);
        $bInArray2 = false;
        foreach ( $array1 as $timeRange1 )
        {
            $a1f = strtotime($timeRange1['from']);
            $a1t = strtotime($timeRange1['to']);
    
            if(($a1f >= $a2f && $a1f <= $a2t) || ($a1t >= $a2f && $a1t <= $a2t))
            {
                $bInArray2 = true;
                break;
            }
        }
        if(!$bInArray2)
            $a2[] = $timeRange2;
    }
    $array2 = $a2;
    echo var_dump($array2);
    ?>
    

    【讨论】:

    • 感谢您的帮助,但结果不正确。 Array1 中为保留时隙,Array2 中为可用时隙。如您所见,每个时间段之间有 15 分钟。示例:从 10:00 - 10:30 保留 09:30 - 10:00 和 10:15 - 10:45 可用因此 09:30 - 10:45 的时间段不应该出现在结果中,因为它是在 10:00 - 10:30 的预留时间段范围内。希望你现在能明白我的意思。提前致谢。
    猜你喜欢
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    相关资源
    最近更新 更多