【问题标题】:Array_merge_recursive not merging correctly (php)Array_merge_recursive 未正确合并(php)
【发布时间】:2015-05-28 07:29:23
【问题描述】:

以下 2 个数组并未像应有的那样在 [2015] 处合并。相反,它会像上一个示例一样创建 [2016]。

我正在使用的代码:

$merge = array_merge_recursive($array, $current);

第一个数组:($current)

Array
(
    [Particulier] => Array
        (
            [Weekend] => Array
                (
                    [2015] => Array
                        (
                            [06] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 111
                                            [startDate] => 12-06-2015
                                            [endDate] => 15-06-2015
                                            [price] => 920
                                        )
                                )
                        )
                )
        )
)

第二个数组:($array)

Array
(
    [Particulier] => Array
        (
            [Weekend] => Array
                (
                    [2015] => Array
                        (
                            [05] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 90
                                            [startDate] => 01-05-2015
                                            [endDate] => 04-05-2015
                                            [price] => 920
                                        )
                                    [1] => Array
                                        (
                                            [id] => 91
                                            [startDate] => 08-05-2015
                                            [endDate] => 11-05-2015
                                            [price] => 920
                                        )
                                    [2] => Array
                                        (
                                            [id] => 92
                                            [startDate] => 15-05-2015
                                            [endDate] => 18-05-2015
                                            [price] => 920
                                        )
                                )
                            [06] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 112
                                            [startDate] => 19-06-2015
                                            [endDate] => 22-06-2015
                                            [price] => 920
                                        )
                                )
                        )
                )
            [Midweek] => Array
                (
                    [2015] => Array
                        (
                            [05] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 94
                                            [startDate] => 11-05-2015
                                            [endDate] => 15-05-2015
                                            [price] => 1225
                                        )
                                    [1] => Array
                                        (
                                            [id] => 95
                                            [startDate] => 18-05-2015
                                            [endDate] => 22-05-2015
                                            [price] => 1225
                                        )
                                )
                            [06] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 118
                                            [startDate] => 15-06-2015
                                            [endDate] => 19-06-2015
                                            [price] => 1225
                                        )
                                )
                        )
                )
        )
    [Clienten en patienten] => Array
        (
            [Weekend] => Array
                (
                    [2015] => Array
                        (
                            [05] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 105
                                            [startDate] => 01-05-2015
                                            [endDate] => 04-05-2015
                                            [price] => 645
                                        )
                                )
                        )
                )
        )
)

当前结果:($merge)

Array
(
    [Particulier] => Array
        (
            [Weekend] => Array
                (
                    [2015] => Array
                        (
                            [05] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 90
                                            [startDate] => 01-05-2015
                                            [endDate] => 04-05-2015
                                            [price] => 920
                                        )
                                [1] => Array
                                    (
                                        [id] => 91
                                        [startDate] => 08-05-2015
                                        [endDate] => 11-05-2015
                                        [price] => 920
                                    )

                                [2] => Array
                                    (
                                        [id] => 92
                                        [startDate] => 15-05-2015
                                        [endDate] => 18-05-2015
                                        [price] => 920
                                    )
                            )
                        [06] => Array
                            (
                                [0] => Array
                                    (
                                        [id] => 112
                                        [startDate] => 19-06-2015
                                        [endDate] => 22-06-2015
                                        [price] => 920
                                    )
                            )
                    )
                [2016] => Array
                    (
                        [06] => Array
                            (
                                [0] => Array
                                    (
                                        [id] => 111
                                        [startDate] => 12-06-2015
                                        [endDate] => 15-06-2015
                                        [price] => 920
                                    )
                            )
                    )
            )

编辑:预期结果

Array
(
    [Particulier] => Array
    (
        [Weekend] => Array
        (
            [2015] => Array
            (
                [05] => Array
                (
                    [0] => Array
                    (
                        [id] => 90
                        [startDate] => 01-05-2015
                        [endDate] => 04-05-2015
                        [price] => 920
                    )

                    [1] => Array
                    (
                        [id] => 91
                        [startDate] => 08-05-2015
                        [endDate] => 11-05-2015
                        [price] => 920
                    )

                    [2] => Array
                    (
                        [id] => 92
                        [startDate] => 15-05-2015
                        [endDate] => 18-05-2015
                        [price] => 920
                    )

                )

                [06] => Array
                (
                    [0] => Array
                    (
                        [id] => 112
                        [startDate] => 19-06-2015
                        [endDate] => 22-06-2015
                        [price] => 920
                    )
                    [1] => Array
                    (
                        [id] => 111
                        [startDate] => 12-06-2015
                        [endDate] => 15-06-2015
                        [price] => 920
                    )
                )
            )
        )

如果需要任何其他信息,请询问! 提前致谢!

【问题讨论】:

  • 请期待结果?
  • @anantkumarsingh 已添加!

标签: php arrays


【解决方案1】:

根据您的描述,您将不得不使用关联数组(使用字符串索引,如“2015”)而不是数字索引(如 2015)。

我还建议使用唯一键作为事件的索引,并使用替代函数 array_replace_recursive 来防止 PHP 创建任何嵌套数组(请参阅 http://php.net/manual/en/function.array-replace-recursive.php

【讨论】:

  • 我正在通过 foreach 循环创建数组。那我如何获得字符串索引呢?并且 array_replace_recursive 不只是覆盖以前的记录吗?那不是我想要的。我希望它添加。
  • 如果有问题,请发布生成数组的 foreach 循环代码。数组替换仅覆盖现有条目。使用唯一键,您将永远不会覆盖您的任何条目。
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多