array_merge不替换匹配的$ key

时间:2019-04-07 09:19:32

标签: php arrays merge array-merge

我试图找出合并两个数组的方法,这些方法本来可以正常工作,但是现在我试图合并多维数组。

第一个数组:

$old_array = 
Array (
    [2] => Array (
        [a] => Location 2
        [b] => loc02
        [c] => Array (  )
    )

    [3] => Array (
        [a] => Location 3
        [b] => loc04
        [c] => Array ( [reader] => reader )
    )
)

第二个数组:

$new_array = 
Array (
    [3] => Array (
        [a] => Location 3 New
        [b] => loc06
        [c] => Array ( [publisher] => publisher )
    )
)

当我运行然后通过array_merge( $old_array, $new_array )时,第二个数组仅被添加到底部,而不是替换同一行。

此操作以前有效,唯一的更改是添加了[c]的数组,并且不确定合并是否导致添加而不是替换。

1 个答案:

答案 0 :(得分:3)

对于数字索引,array_merge会将新项追加到第一个数组的末尾。这对于字符串索引非常有效,因为值会被覆盖。如果要合并它们以获取数字索引,请使用“ +”运算符。

查看此评论:https://www.php.net/manual/en/function.array-merge.php#92602

如果您有$a$b两个数组,并且想用$a的值覆盖$b的值,则忘记添加,然后, $new_array = $b + $a; 因此,上面的数组将导致:

Array
(
    [3] => Array
        (
            [a] => Location 3 new
            [b] => loc06
            [c] => Array
                (
                    [publisher] => publisher
                )

        )

    [2] => Array
        (
            [a] => Location 2
            [b] => loc02
            [c] => Array
                (
                )

        )

)