Php 基于键将数组项合并到一个具有三个层的数组中
我的数据库中有大量的事件,其结构如下:Php 基于键将数组项合并到一个具有三个层的数组中,php,arrays,array-merge,Php,Arrays,Array Merge,我的数据库中有大量的事件,其结构如下: $events = array( // Sept 10 2018 array( 2018 => array( 9 => array( 10 => array( 'event01' ) ) ) ), // Sept 20 201
$events = array(
// Sept 10 2018
array(
2018 => array(
9 => array(
10 => array(
'event01'
)
)
)
),
// Sept 20 2018
array(
2018 => array(
9 => array(
20 => array(
'event02'
)
)
)
),
// Oct 5 2019
array(
2018 => array(
10 => array(
5 => array(
'event03'
)
)
)
)
);
我需要这样的结构:
$result = array(
2018 => array(
// September
9 => array(
10 => array(
'event01'
),
20 => array(
'event02'
)
),
// October
10 => array(
5 => array(
'event03'
)
)
)
);
我试图将它与array\u key\u组合在一起,共有三个foreach
s,但我没有取得多大进展,也不确定这是否是最好的方法。初始数组的结构是固定格式,数据是动态的
有人帮忙吗?提前感谢。您可以使用3foreach
循环来实现您的结果
$eventFiltered = [];
foreach ($events as $eventByYear) {
foreach ($eventByYear as $year => $eventByMonth) {
foreach ($eventByMonth as $month => $eventByDay) {
$eventFiltered[$year][$month][key($eventByDay)][] = $eventByDay[key($eventByDay)][0];
}
}
}
echo "<pre>";
print_r($eventFiltered);
exit;
您可以使用3foreach
循环来实现您的结果
$eventFiltered = [];
foreach ($events as $eventByYear) {
foreach ($eventByYear as $year => $eventByMonth) {
foreach ($eventByMonth as $month => $eventByDay) {
$eventFiltered[$year][$month][key($eventByDay)][] = $eventByDay[key($eventByDay)][0];
}
}
}
echo "<pre>";
print_r($eventFiltered);
exit;
您不需要编写任何循环,只需将数组的所有元素传递到数组\u replace\u recursive
:
这还有一个好处,它可以在任意数量的级别上工作,因此,如果将来结构发生更改,那么代码就不必更改
请参见您不需要编写任何循环,只需将数组的所有元素传递给array\u replace\u recursive
:
这还有一个好处,它可以在任意数量的级别上工作,因此,如果将来结构发生更改,那么代码就不必更改
请参见以改善您在上的体验,请阅读如何提问,以及和如何创建一个与上的几乎所有问题类似的问题。因此,如果您展示一些代码,您将从社区获得更好的响应。以改善您在上的体验,请阅读如何提问,和如何创建一个几乎所有的问题,所以如果你展示一些代码,你会从社区得到更好的响应如果我在同一天有超过1个事件,它只会给出当天的最后一个事件;如果我想要所有的活动呢?我不知道它可以像这样使用,但是如果一天中有多个活动,是的可能会有问题。还是谢谢你@DivyeshPrajapati我不确定我是否理解,抱歉-我的示例中的输出与问题中的内容匹配。如果任何一个叶节点有多个元素,它们都会出现在结果中。是的,它与确切的o/p匹配,但我想如果同一天有多个事件呢?这就是为什么我问是否可以使用任何数组函数的原因。@divyeshpragapati我仍然不明白你的意思。如果同一天有多个活动。什么意思?如果我在同一天有一个以上的活动,它只会在那一天提供最后一个活动;如果我想要所有的活动呢?我不知道它可以像这样使用,但是如果一天中有多个活动,是的可能会有问题。还是谢谢你@DivyeshPrajapati我不确定我是否理解,抱歉-我的示例中的输出与问题中的内容匹配。如果任何一个叶节点有多个元素,它们都会出现在结果中。是的,它与确切的o/p匹配,但我想如果同一天有多个事件呢?这就是为什么我问是否可以使用任何数组函数的原因。@divyeshpragapati我仍然不明白你的意思。如果同一天有多个活动。你说它只会在那天举行最后一次活动是什么意思?谢谢!这也让我能够过滤掉当天发生的事件。救生员:是的;也就是说,在我的脑海里,你们可能也在同一天要参加活动;我也向@iainn alsoThank you问了同样的问题!这也让我能够过滤掉当天发生的事件。救生员:是的;也就是说,在我的脑海里,你们可能也在同一天要参加活动;我也向@iainn问了同样的问题
$merged = array_replace_recursive(...$events);