希望你做得很好!排除日期/時間範圍與重疊的日期/時間範圍
我有點卡住這個,我所做的只有在沒有重疊的情況下才能工作,無論如何我都不確定這是正確的方法。
所以我當前的實現是合併所有時間(start_time和end_time作爲該數組中的不同條目),對它們進行排序並刪除重複項(如果有的話)。
然後我循環進入該列表並檢查它們是否在$ times範圍內而不在限制範圍內。
所有通過這些條件的人都被添加到另一個列表中。然後,最後,我將循環訪問該列表'一次2項',並構建最終的時間範圍數組。
代碼:https://3v4l.org/2elDs(Laravel,使用收集和碳,所以不會出現運行)
樣品沒有日期/時間重疊:
$times = [
[
'start_time' => '2017-06-26 00:00:00',
'end_time' => '2017-06-26 05:00:00',
],
[
'start_time' => '2017-06-26 13:00:00',
'end_time' => '2017-06-26 18:00:00',
]
];
$timesToExclude= [
[
'start_time' => '2017-06-26 04:00:00',
'end_time' => '2017-06-26 04:30:00',
],
[
'start_time' => '2017-06-26 07:00:00',
'end_time' => '2017-06-26 10:00:00',
],
[
'start_time' => '2017-06-26 15:00:00',
'end_time' => '2017-06-26 16:00:00',
]
];
結果:
$result = [
[
"start_time" => "2017-06-26 00:00:00",
"end_time" => "2017-06-26 04:00:00"
], [
"start_time" => "2017-06-26 04:30:00",
"end_time" => "2017-06-26 05:00:00"
],
[
"start_time" => "2017-06-26 13:00:00",
"end_time" => "2017-06-26 15:00:00"
],
[
"start_time" => "2017-06-26 16:00:00",
"end_time" => "2017-06-26 18:00:00"
]
]
帶日期/時間重疊的樣本
$times = [
[
'start_time' => '2017-06-26 00:00:00',
'end_time' => '2017-06-26 10:00:00',
],
[
'start_time' => '2017-06-26 05:00:00',
'end_time' => '2017-06-26 20:00:00',
]
];
$timesToExclude= [
[
'start_time' => '2017-06-26 04:00:00',
'end_time' => '2017-06-26 04:30:00',
],
[
'start_time' => '2017-06-26 07:00:00',
'end_time' => '2017-06-26 09:00:00',
],
[
'start_time' => '2017-06-26 15:00:00',
'end_time' => '2017-06-26 16:00:00',
]
];
應該產生於:
$result = [
[
"start_time" => "2017-06-26 00:00:00",
"end_time" => "2017-06-26 04:00:00"
], [
"start_time" => "2017-06-26 04:30:00",
"end_time" => "2017-06-26 05:00:00"
],
[
"start_time" => "2017-06-26 05:00:00",
"end_time" => "2017-06-26 07:00:00"
],
[
"start_time" => "2017-06-26 09:00:00",
"end_time" => "2017-06-26 10:00:00"
],
[
"start_time" => "2017-06-26 10:00:00",
"end_time" => "2017-06-26 15:00:00"
],
[
"start_time" => "2017-06-26 16:00:00",
"end_time" => "2017-06-26 20:00:00"
]
]
任何人都知道正確的算法中/僞來處理呢?
你的例子對我沒有意義。我只看了第一個。輸入5個數組,輸出4.我可以理解你提到的重複。但時代正在轉移。爲什麼? 00-05變成00-04。 04-04:30我搬走了,也改變了。我不明白你需要以不同的方式驗證或解釋你的輸入/輸出。 – Andreas
@Andreas $ times是我最初的次數列表,$ timesToExclude是我需要從最初列表中排除的次數,只是將該變量重命名,是否有意義? – David
我明白你的意思了。讓我想一會兒。 – Andreas