你有没有一天你的大脑没有脱离一档?
我有一个包含开始和结束时间的数组.我想创建一个新数组,显示初始数组中重叠条目的键.所以,说我们有一些“保留”.任何重叠的“预订”都属于同一个“会话”.一个初始数组如:
[reservations] => Array
(
[1125] => Array
(
[start] => 2011-01-07 10:00:00
[end] => 2011-01-07 10:30:00
)
[1244] => Array
(
[start] => 2011-01-07 10:15:00
[end] => 2011-01-07 11:30:00
)
[1311] => Array
(
[start] => 2011-01-07 11:00:00
[end] => 2011-01-07 11:45:00
)
[1422] => Array
(
[start] => 2011-01-07 12:00:00
[end] => 2011-01-07 12:30:00
)
[1561] => Array
(
[start] => 2011-01-07 12:30:00
[end] => 2011-01-07 12:45:00
)
[1622] => Array
(
[start] => 2011-01-07 13:00:00
[end] => 2011-01-07 13:45:00
)
)
会生成一个新的数组,如:
[sessions] => Array
(
[0] => Array
(
[0] => 1125
[1] => 1244
[2] => 1311
)
[1] => Array
(
[0] => 1422
[1] => 1561
)
[2] => Array
(
[0] => 1622
)
)
对大型阵列执行此操作的最有效方法是什么?谢谢!
解决方法:
对于每个预留,将其(start,id)和(end,id)(单独)放入在第一个项目(即时间)上排序的元组数组中.然后从最低时间到最高时间遍历数组,保持打开的预留,把每一个新的都放在同一个会话中.关闭会话中的最后一个预留后,关闭会话.
标签:php,algorithm,arrays,performance
来源: https://codeday.me/bug/20190630/1340559.html