我有一项复杂的任务,几天来我一直在用头撞墙。我已经尝试了大约 4 种不同的方法,但是每种方法似乎都停滞不前,并且变得非常令人沮丧。
我有一个时间范围。例如,14:30:00 至 18:30:00。考虑某人轮班的时间范围。在此时间范围内,他们表示 15:30:00 至 16:30:00 以及 17:30:00 至 18:30:00 不能工作。我需要修改原始班次的开始和结束时间以删除冲突的班次。
原始的移位数组如下所示:
$original_shift[0]['start'] = '14:30:00';
$original_shift[0]['end'] = '18:30:00';
从原始班次中删除的时间范围如下所示:
$subshift[0]['start'] = '15:30:00';
$subshift[0]['end'] = '16:30:00';
$subshift[1]['start'] = '17:30:00';
$subshift[1]['end'] = '18:30:00';
这是一个可视化:
所以,当我完成后,我基本上需要我原来的班次看起来像这样:
$original_shift[0]['start'] = '14:30:00';
$original_shift[0]['end'] = '15:30:00';
$original_shift[1]['start'] = '16:30:00';
$original_shift[1]['end'] = '17:30:00';
我还需要考虑的一些并发症是:
这些时间范围可以是任何时间(不限于我在示例中使用的半小时),但是我将 100% 确定地知道不可用的时间范围将始终在原始轮班的开始时间和之间或之间开始和结束。结束时间。
空闲时间可能会增加和/或占用整个原始班次的时间。
我并不是在寻找“编写我的代码”的人,而是在寻找过去处理过此类事情并且可能对他们如何完成它有一些见解的人。
由于您特别要求“一些见解”而不是完整的工作答案,因此我个人会选择填充“分钟”的数组。
$shift = array(
'start' => '15:30:00',
'end' => '18:30:00',
'original' => array(),
'unavailable' => array(),
'modified' => array()
);
然后你会做一些 jiggery pokery 来转换15:30:00
进入 930 和18:30:00
输入 1110(分钟数),这将为您提供开始时间和结束时间之间的差异。
Use range()
来快速填满original
数组,加载到你的unavailable
以类似的格式,然后使用类似的东西array_intersect()
and array_diff()
找出原始班次中哪些分钟不可用。
从此,建立modified
数组,然后直接从那里读取到输出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)