如何合并两个多维数组并更新重复数据?

时间:2016-05-21 22:32:49

标签: php arrays

我尝试使用" array_merge($ a,$ b)"但这对我正在做的事情不起作用。这是两个数组:

$a =
Array
(
    [Mike] => Array
        (
            [100] => Array
                (
                    [quantity] => 1
                    [attribute] => 1
                )

            [200] => Array
                (
                    [quantity] => 1
                    [attribute] => 1
                )

            [300] => Array
                (
                    [quantity] => 1
                    [attribute] => 1
                )

            [400] => Array
                (
                    [quantity] => 1
                    [attribute] => 1
                )

        )

)


$b =
Array
(
    [Mike] => Array
        (
            [500] => Array
                (
                    [quantity] => 1
                    [attribute] => 1
                )

            [600] => Array
                (
                    [quantity] => 1
                    [attribute] => 1
                )

        )

)

这个概念是用户" Mike"将项目添加到其列表中(100,200,300,400)。此列表保存在数据库中。 Mike几天后作为匿名访客退出并开始新的列表,添加了他的会话中保存的项目(500,600)。当他完成并重新登录后,我想合并两个列表并保存更新的列表。如果我使用" array_merge"由于数组键是[Mike],因此它设计完全用$ b替换$ a而不是将项目号合并在一起。

我该如何结合这个?此外,如果两个列表中的两个项目相同,例如一个列表中的(100,200,300,400)和第二个列表中的(100,500)(项目编号" 100"此处是重复项目)。我想要" 100"的[数量]和[属性]字段。在第二个列表中覆盖项目" 100"的那些字段在第一个列表中。

由于 亲切的问候

2 个答案:

答案 0 :(得分:1)

使用array_replace_recursive函数(“更新重复项”):

$result = array_replace_recursive($a, $b);

print_r($result);

输出:

Array
(
    [Mike] => Array
        (
            [100] => Array
                (
                    [quantity] => 1
                    [attribute] => 1
                )

            [200] => Array
                (
                    [quantity] => 1
                    [attribute] => 1
                )

            [300] => Array
                (
                    [quantity] => 1
                    [attribute] => 1
                )

            [400] => Array
                (
                    [quantity] => 1
                    [attribute] => 1
                )

            [500] => Array
                (
                    [quantity] => 1
                    [attribute] => 1
                )

            [600] => Array
                (
                    [quantity] => 1
                    [attribute] => 1
                )
        )
)

http://php.net/manual/en/function.array-replace-recursive.php

答案 1 :(得分:0)

您可以使用以下代码。一定要先把你最新的结果。它会给你你想要的结果。

  $c = $b['Mike']+$a['Mike'];

感谢