3

我有许多数组,我希望在不覆盖或丢失任何数据的情况下合并它们。我相信它们被称为关联数组,但我不是 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']都将保留['title'] ['description']在 $array3 中。

这可能吗?

多谢你们。

4

2 回答 2

3

I have found using array_replace_recursive nested works. This first call creates an array merged which may have some values removed, the second call will remerge back into your master array keeping all array keys from the master array but allowing the merged in array to overwrite values in the master.

 $mergedArray = array_replace_recursive($array2, array_replace_recursive($array1, $array2));
于 2014-01-24T18:17:52.713 回答
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;
}

您可以从这个演示中看到,这会创建一个数组,如:

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

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

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

)
于 2013-07-12T20:05:08.157 回答