在数组中查找重叠日期范围

4

我有一个日期范围的数组,就像这样:

[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
                )

我正在尝试计算每个事件之间的重叠部分,并将该重叠部分拆分成数组中的独立项目,然后相应地调整相交事件的起始时间和结束时间,使它们不再重叠。例如,在上面的数组中,“苹果”与“橙子”相交一天,因此我希望最终得到一个看起来像这样的数组。

[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
                )

1
你目前尝试了什么?你遇到了哪个问题?你的代码在哪里? - hakre
你希望我们为你编写代码吗? :) - Talisin
其实我只是在寻找一些指引。我刚开始学习 PHP,正在尝试构建一个简单的活动预订系统。起初我甚至不确定如何着手,但现在我有了一些想法。我并不是在寻求任何人为我编写代码,如果看起来是这样的话,我很抱歉。 - user965408
没关系,只是从你提问的方式不太清楚。 - data
1个回答

0
为了得到相对高效的代码,我猜你需要按开始时间排序日期。之后,通过遍历结束日期,获取交集应该相当容易。
正如你所说,你是 PHP 新手,你可能想要阅读一下函数 http://php.net/manual/en/function.strtotime.php。这将把你格式化的日期转换为 Unix 时间戳,从而使它们可以进行比较。
对于排序你上面的数据结构,可以查看不同的数组排序函数:http://de3.php.net/manual/en/array.sorting.php。特别是 uasort 对你可能很有用。
正如其他人所说,SO 不是为了编写你的代码,因此请查看集合论以获得更好的性能解决方案的想法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接