我有许多数组,我希望合并它们而不会覆盖或丢失任何数据。我相信它们被称为关联数组,但我对术语并不是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']
下。
这可能吗?
谢谢你们。
答案 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
)
)