PHP合并数组而不覆盖数据

时间:2013-07-12 19:56:11

标签: php arrays merge

我有许多数组,我希望合并它们而不会覆盖或丢失任何数据。我相信它们被称为关联数组,但我对术语并不是100%肯定。

数组包含以下信息:

$array1['title']
$array1['description']

$array2['title']
$array2['description']
$array2['random information']

我想合并$ array1和$ array2的公共密钥中包含的信息,而不会覆盖任何数据。

这可能吗?

我尝试过但未成功的事情包括以下内容:

(array)$array3 = (array)$array1 + array($array2);

$array3 = array_push($array1,$array2);

 $array3 = array_merge_recursive($array1,$array2);

基本上我想保留公共密钥,并将两个数组中的信息添加到新数组中。例如,我只想在新数组中有一个['title'] ['description']等,但我想要新数组中两个数组的信息。

所以$ array3将包含$ array1和$ array2中的所有信息...... ['title'] ['description']中的所有项目都将保留在$ array3中的['title'] ['description']下。

这可能吗?

谢谢你们。

2 个答案:

答案 0 :(得分:3)

我发现使用array_replace_recursive嵌套作品。第一个调用创建一个合并的数组,可能会删除一些值,第二个调用将重新返回到主数组,保留所有数组键来自主数组,但允许合并的数组覆盖主数据中的值。

 $mergedArray = array_replace_recursive($array2, array_replace_recursive($array1, $array2));

答案 1 :(得分:0)

我会合并所有键,然后合并数组,如下所示:

$merged = array();
foreach( array_merge( array_keys( $array1), array_keys( $array2)) as $key) {
    $values = array();
    if( array_key_exists( $key, $array1)) {
        $values[] = $array1[$key];
    }
    if( array_key_exists( $key, $array2)) {
        $values[] = $array2[$key];
    }
    $merged[$key] = $values;
}

您可以从this demo看到这会创建一个类似的数组:

Array
(
    [title] => Array
        (
            [0] => title1
            [1] => title2
        )

    [description] => Array
        (
            [0] => desc1
            [1] => desc2
        )

    [random information] => Array
        (
            [0] => random2
        )

)