Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Merge - Fatal编程技术网

PHP在不覆盖数据的情况下合并数组

PHP在不覆盖数据的情况下合并数组,php,arrays,merge,Php,Arrays,Merge,我有许多数组,我希望在不覆盖或丢失任何数据的情况下合并它们。我相信它们被称为关联数组,但我对术语没有100%的把握 数组包含如下信息: $array1['title'] $array1['description'] $array2['title'] $array2['description'] $array2['random information'] 我希望合并$array1和$array2公共键中包含的信息,而不覆盖任何数据 这可能吗 我尝试过但没有成功的事情包括: (array)$ar

我有许多数组,我希望在不覆盖或丢失任何数据的情况下合并它们。我相信它们被称为关联数组,但我对术语没有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']

这可能吗


谢谢各位

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

$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;
}
从中可以看出,这将创建一个如下所示的数组:

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

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

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

)

我发现使用数组替换递归嵌套工作。第一次调用创建了一个合并的数组,该数组可能会删除一些值,第二次调用将重新合并回主数组,保留主数组中的所有数组键,但允许合并后的数组覆盖主数组中的值

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

查看这两个数组中的公共密钥会发生什么情况?@Schleis我想保留公共密钥,并将两个数组中的信息添加到新数组中。Thanks@Schleis我只希望在新数组中有一个
['title']['description']
等,但我希望在新数组中有两个数组的信息我相信OP正在查找
数组('title'=>array(),'description'=>array())我尝试过这个,它似乎不适当地合并了它们。。假设
$array1['title']
包含
'document1',document2'
$array2['title']
包含
'document3'和'document4'
…现在
$array3['title']
现在包含以下列表:
'document1'
然后
'document3'
然后
'document2'
然后
'document4'
…我的数据比这要复杂得多,但这是我要尽可能简化的。。这是我所在地区的就寝时间,明天我将再次尝试!谢谢!:)