【发布时间】:2023-03-21 18:00:01
【问题描述】:
我接手了一个已经包含大量数据的项目。 给定的格式不是最好的,并且只包含单个数据集。它们中的大多数属于同一个“事件”。我想合并这些数据集。
给定的数据集采用以下格式:
给定数据集:
[0] => Array
(
[id] => 4
[title] => Party 1
[start] => 2017-06-14
[end] => 2017-06-14
[className] => Array
(
[0] => yyy
[1] => zzz
)
[color] => #26B99A
[zeit] => xxx
)
[1] => Array
(
[id] => 6
[title] => Party 2
[start] => 2017-04-27
[end] => 2017-04-27
[className] => Array
(
[0] => xxx
[1] => yyy
)
[color] => #26B99A
[zeit] => zzz
)
[2] => Array
(
[id] => 7
[title] => Party 2
[start] => 2017-04-28
[end] => 2017-04-28
[className] => Array
(
[0] => xxx
[1] => yyy
)
[color] => #26B99A
[zeit] => zzz
)
[3] => Array
(
[id] => 9
[title] => Party 2
[start] => 2017-04-29
[end] => 2017-04-29
[className] => Array
(
[0] => xxx
[1] => yyy
)
[color] => #26B99A
[zeit] => zzz
)
[4] => Array
(
[id] => 11
[title] => Party 3
[start] => 2017-07-30
[end] => 2017-07-30
[className] => Array
(
[0] => xxx
[1] => yyy
)
[color] => #26B99A
[zeit] => zzz
)
[5] => Array
(
[id] => 13
[title] => Party 3
[start] => 2017-07-31
[end] => 2017-07-31
[className] => Array
(
[0] => xxx
[1] => yyy
)
[color] => #26B99A
[zeit] => zzz
)......
在这种情况下,将只有一个“Party 1”,并结合了“Party 2”和“Party 3”
因此结果应如下所示:
预期结果
[0] => Array
(
[id] => 4
[title] => Party 1
[start] => 2017-06-14
[end] => 2017-06-14
[className] => Array
(
[0] => yyy
[1] => zzz
)
[color] => #26B99A
[zeit] => xxx
)
[1] => Array
(
[id] => 6
[title] => Party 2
[start] => 2017-04-27
[end] => 2017-04-29 <---- end date edited
[className] => Array
(
[0] => xxx
[1] => yyy
)
[color] => #26B99A
[zeit] => zzz
)
[2] => Array
(
[id] => 11
[title] => Party 3
[start] => 2017-07-30
[end] => 2017-07-31 <---- same
[className] => Array
(
[0] => xxx
[1] => yyy
)
[color] => #26B99A
[zeit] => zzz
)
因此,我使用了一个 PHP 函数,它通过事件的标题对其进行格式化:
PHP:
function formateEvents($event_array){
$events = array();
foreach($event_array as $event)
{
if(!isset($events[$event['title']]))
{
$events[$event['title']]['id'] = $event['id'];
$events[$event['title']]['title'] = $event['title'];
$events[$event['title']]['start'] = $event['start'];
$events[$event['title']]['end'] = $event['end'];
$events[$event['title']]['name'] = $event['title'];
$events[$event['title']]['className'] = $event['className'];
$events[$event['title']]['color'] = $event['color'];
$events[$event['title']]['zeit'] = $event['zeit'];
}else{
if(strtotime($event['start']) < strtotime($events[$event['title']]['start']))
{
$events[$event['title']]['start'] = $event['start'];
}
if(strtotime($event['end']) > strtotime($events[$event['title']]['end']))
{
$events[$event['title']]['end'] = $event['end'];
}
}
}
return array_values($events);
}
这适用于上述这些数据集。 但是:问题是,我也有几年前的事件数据,它们通常具有相同的标题。在这种情况下,事件持续时间超过多年。我想防止这种情况的发生,只有同名的数据以及连接的天数应该合并。
我想到的唯一方法是检查日期是否连续......比如 2018-01-01、2018-01-02、2018-01-03 应该是同一个事件...如果中间缺了一天,它应该算作另一个事件
【问题讨论】:
-
我认为需要指定一个事件可以连接到另一个具有相同标题的事件多长时间。但是有了这个设置,您可以将结果累积在另一个由标题索引的数组中,并与您拥有的日期进行比较来评估它们中的每一个。你明白我的意思吗?
-
我明白了,但不可能一概而论事件持续时间......它们可以从 1 天到 3 个月不等。其中一些是从 12 月到 1 月 - 所以我也不能按年份分开它们。
-
我明白这一点。但是您说:“我想以一种方式防止这种情况发生,即只有具有相同名称的数据以及连接的日期应该组合在一起”。在这种情况下,您如何确定这些日子是否相互关联?
-
我想到的唯一方法是检查日子是否连续......就像 2018-01-01, 2018-01-02, 2018-01-03 应该是一样的事件...如果中间缺少一天,它应该算作另一个事件
-
好的,这很有帮助。请将此信息添加到问题本身,以便每个人都可以阅读。 :)
标签: php algorithm sorting multidimensional-array