有一个数组,其中“源”是工作时间段的开始和结束。 “间歇”是指有休息时间的间歇。
[
'source' => [
'start' => '8:00'
'end' => '12:00'
]
'intervals' => [
0 => [
'from' => '08:30'
'to' => '08:45'
]
1 => [
'from' => '09:30'
'to' => '09:45'
]
2 => [
'from' => '11:00'
'to' => '11:15'
]
]
]
有必要获取工作时间段(不包括这些相同的休息时间),以便进一步记录在数据库中。
我请求算法方面的帮助,我收到了上述数组作为我的算法,但在这里我什至不知道从哪里开始。
我尝试使用链表blister/linkedlist
。
$i = 0;
/** @var LLNode $item */
foreach ($list as $item){
$i++;
if ($i == 1){
$result['found'][] = "{$start} - {$item->value->from}";
}
if ($item->prev){
$result['found'][] = "{$item->prev->value->to} - {$item->value->from}";
}
if ($i === $list->length){
$result['found'][] = "{$list->tail->value->to} - {$end}";
}
}
输出时我得到:
[
'source' => [
'start' => '8:00'
'end' => '12:00'
]
'intervals' => [
0 => '08:30 - 08:45'
1 => '09:30 - 09:45'
2 => '11:00 - 11:15'
]
'found' => [
0 => '8:00 - 08:30'
1 => '09:45 - 11:00'
2 => '11:15 - 12:00'
]
]
我不明白为什么缺少一个间隔...我明白,结果应该是时间间隔比间隔数多...
如果你没有交集并且一切都按时间排序,那么以下就足够了:
写入第一个工作间隔的开头
source start
走过一系列的休息时间。
from
结束当前工作间隔,将其写入输出数组,to
开始新的工作间隔。最后完成最后一个工作间隔
source end
在 PHP 中,我不明白如何在在线编译器中使用数组,所以这里有一个 Python 示例: