每日时间表开始于08:30,结束于17:00 (时间以“ nn:nn”开头和“ nn:nn”结尾表示)。
时间段只能在小时的:00,:15,:30,:45开始和结束。
给定的时间表将有零个或多个(不重叠)时间段被预先预订 (具有可变的块大小-从8:30-17:00的一个块中的任何一个;或者可以是15分钟,半小时,多个小时的块等许多小块)。
示例输入:
$schedule = [
[
'begin' => '10:00',
'end' => '12:30'
],
[
'begin' => '15:15',
'end' => '16:00'
]
];
示例输出:
$gapFiller =
[
[
'begin' => '08:30',
'end' => '10:00'
],
[
'begin' => '12:30',
'end' => '15:15'
],
[
'begin' => '16:00',
'end' => '17:00'
]
];
创建一个函数,该函数返回零个或多个块的数组,以填补预先预订的日程安排中存在的所有空白。在不与其他任何块重叠的情况下,使块的跨度尽可能大。
function fillGaps($schedule){
//code...
return $gapFiller;
}
$gapFiller = fillGaps($schedule);
答案 0 :(得分:1)
此功能将根据不重叠的输入对您提供所需的结果:
function fillGaps($schedule) {
$gaps = array();
$time = strtotime('08:30');
foreach ($schedule as $event) {
if ($time < strtotime($event['begin']))
$gaps[] = array('start' => date('H:i', $time), 'end' => $event['begin']);
$time = strtotime($event['end']);
}
if ($time < strtotime('17:00'))
$gaps[] = array('start' => date('H:i', $time), 'end' => '17:00');
return $gaps;
}
输出示例数据:
array (
0 =>
array (
'start' => '08:30',
'end' => '10:00',
),
1 =>
array (
'start' => '12:30',
'end' => '15:15',
),
2 =>
array (
'start' => '16:00',
'end' => '17:00',
),
)
在rextester上的演示