Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于键将数组项合并到一个具有三个层的数组中_Php_Arrays_Array Merge - Fatal编程技术网

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,但我没有取得多大进展,也不确定这是否是最好的方法。初始数组的结构是固定格式,数据是动态的


有人帮忙吗?提前感谢。

您可以使用3
foreach
循环来实现您的结果

$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;

您可以使用3
foreach
循环来实现您的结果

$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);