Php 从阵列获取时间间隔/空闲时间

Php 从阵列获取时间间隔/空闲时间,php,arrays,Php,Arrays,假设有人需要预订房间。客房预订服务从08:00:00到18:00:00开放。因此,预订时间有限: array:2 [▼ 0 => "08:00:00" 1 => "18:00:00" ] 而且房间可能还有一些已经预订的时间,应该是这样的: array:3 [▼ 0 => array:2 [▼ 0 => "08:05:00" 1 => "09:00:00" ] 1 => array:2 [▼ 0 => "10:

假设有人需要预订房间。客房预订服务从08:00:00到18:00:00开放。因此,预订时间有限:

array:2 [▼
  0 => "08:00:00"
  1 => "18:00:00"
]
而且房间可能还有一些已经预订的时间,应该是这样的:

array:3 [▼
  0 => array:2 [▼
    0 => "08:05:00"
    1 => "09:00:00"
  ]
  1 => array:2 [▼
    0 => "10:00:00"
    1 => "15:00:00"
  ]
  2 => array:2 [▼
    0 => "16:00:00"
    1 => "17:00:00"
  ]
]
array:4 [▼

  0 => array:2 [▼
    0 => "8:00:00"
    1 => "8:05:00"
  ]
  1 => array:2 [▼
    0 => "9:00:00"
    1 => "10:00:00"
  ]
  2 => array:2 [▼
    0 => "15:00:00"
    1 => "16:00:00"
  ]
  3 => array:2 [▼
    0 => "17:00:00"
    1 => "18:00:00"
  ]
]

我想做的是找出时间间隔,结果应该是这样的:

array:3 [▼
  0 => array:2 [▼
    0 => "08:05:00"
    1 => "09:00:00"
  ]
  1 => array:2 [▼
    0 => "10:00:00"
    1 => "15:00:00"
  ]
  2 => array:2 [▼
    0 => "16:00:00"
    1 => "17:00:00"
  ]
]
array:4 [▼

  0 => array:2 [▼
    0 => "8:00:00"
    1 => "8:05:00"
  ]
  1 => array:2 [▼
    0 => "9:00:00"
    1 => "10:00:00"
  ]
  2 => array:2 [▼
    0 => "15:00:00"
    1 => "16:00:00"
  ]
  3 => array:2 [▼
    0 => "17:00:00"
    1 => "18:00:00"
  ]
]


似乎我必须先对预定的时间数组进行排序,然后对数组进行补充。但是如何在PHP代码中实现它。有人能帮我解决这个问题吗?提前THX。

如果您的预订没有按开始时间排序,您需要对其进行排序。然后,您可以迭代预订,在一次预订结束和下一次预订开始之间创建空闲时间条目。注意,由于您的时间是HH:mm:ss格式的,所以您可以直接将它们作为字符串进行比较;不需要将它们转换为整数时间值

$hours = ["08:00:00", "18:00:00"];

$bookings = [["10:00:00", "15:00:00"],
             ["08:05:00", "09:00:00"],
             ["16:00:00", "17:00:00"]
             ];

$start = $hours[0];
$end = $hours[1];

// sort the bookings
$bstart = array_column($bookings, 0);
array_multisort($bstart, $bookings);

// get the free times
$time = $start;
$bindex = 0;
$free = array();
while ($time < $end && $bindex < count($bookings)) {
    if ($time < $bookings[$bindex][0]) {
        $free[] = [$time, $bookings[$bindex][0]];
    }
    $time = $bookings[$bindex][1];
    $bindex++;
}
// end of day free?
if ($time < $end) {
    $free[] = [$time, $end];
}
print_r($free);

到目前为止你尝试了什么?请在尝试解决问题时发布代码issue@Hexwell别担心,我很高兴能帮上忙。