我有一系列日期范围如下:
[0] => Array
(
[start_time] => 2011-10-01 00:00:00
[end_time] => 2011-10-05 00:00:00
[name] => Apples
)
[1] => Array
(
[start_time] => 2011-10-04 00:00:00
[end_time] => 2011-10-10 00:23:00
[name] => Oranges
)
[2] => Array
(
[start_time] => 2011-10-15 00:00:00
[end_time] => 2011-10-20 00:23:00
[name] => Bananas
)
我正在尝试计算每个事件之间的重叠并将此重叠“拆分”到数组中的单独项目中,然后相应地调整相交事件的start_time和end_time,使它们不再重叠。例如,在上面的数组中,'Apples'与Oranges相交一天,所以我想最终得到一个看起来像这样的数组。
[0] => Array
(
[start_time] => 2011-10-01 00:00:00
[end_time] => 2011-10-04 00:00:00
[name] => Apples
)
[1] => Array
(
[start_time] => 2011-10-04 00:00:00
[end_time] => 2011-10-05 00:00:00
[name] => Apples Oranges
)
[2] => Array
(
[start_time] => 2011-10-05 00:00:00
[end_time] => 2011-10-10 00:23:00
[name] => Oranges
)
[3] => Array
(
[start_time] => 2011-10-15 00:00:00
[end_time] => 2011-10-20 00:23:00
[name] => Bananas
)
答案 0 :(得分:0)
为了获得合理有效的代码,我猜你必须按开始时间订购日期。在那之后,通过走过结束日期来获得交叉点应该相当容易。
正如你所说的,你是PHP的新手,你可能想要阅读函数http://php.net/manual/en/function.strtotime.php这会将你的格式化日期转换成unix时间戳,从而使它们具有可比性。
要对上述数据结构进行排序,请查看数组的不同排序函数:http://de3.php.net/manual/en/array.sorting.php
特别是uasort
可能对你有用。
正如其他人所说的那样,SO并不是在编写代码,所以请看一下集合论以获得更好的解决方案。