我有两个这样的数组:
array(
'11' => '11',
'22' => '22',
'33' => '33',
'44' => '44'
);
array(
'44' => '44',
'55' => '55',
'66' => '66',
'77' => '77'
);
我想合并这两个数组,这样它就不会包含重复的键,并且保留它们原来的键。例如,输出应该是:
array(
'11' => '11',
'22' => '22',
'33' => '33',
'44' => '44',
'55' => '55',
'66' => '66',
'77' => '77'
);
我已经尝试过这个,但它正在改变他们原来的关键字:
$output = array_unique( array_merge( $array1 , $array2 ) );
有什么办法吗?
9条答案
按热度按时间pokxtpni1#
这是可行的:
gmol16392#
使用php7.4执行此操作的新方法是Spread操作符**[...]**
Spread运算符的性能应优于
array_merge
Spread操作符的一个显著优点是它支持任何可遍历对象,而array_merge函数仅支持数组。
pw9qyyiw3#
若要执行此操作,您可以循环通过一个并追加到另一个:
**更新:**KingCrunch提出了最佳解决方案:
print_r($array1+$array2);
vnjpjtjt4#
如果您使用的是PHP 7.4或更高版本,则可以使用spread运算符
...
,如PHP文档中的以下示例所示:它的工作原理与JavaScript ES6类似。
有关更多信息,请访问https://wiki.php.net/rfc/spread_operator_for_array。
fruv7luv5#
这是可行的:
ht4b089n6#
警告!$array1 + $array2覆盖键,因此我的解决方案(对于多维数组)是使用array_unique()
sort_flags
的默认值改回SORT_STRING。它是perfectly works。希望它也有帮助。
qoefvg9y7#
https://www.php.net/manual/en/function.array-merge.php
w8rqjzmb8#
只需用途:
这应该可以解决这个问题。因为你使用了字符串键,如果一个键出现了不止一次(比如你的例子中的
'44'
),那么这个键会覆盖前面同名的键。因为在你的例子中,它们都有相同的值,这没有关系,它也会删除重复的键。更新:我刚刚意识到,PHP把数字字符串键当作数字(整数),所以会像这样,这意味着,它也重新编号键...
解决方法是重新创建密钥。
更新2:我总是忘记,还有一个操作符(粗体,因为这是 * 真的 * 你正在寻找!:D)
所有这些都可以在以下方面看到:http://php.net/manual/en/function.array-merge.php
pprl5pva9#
你应该考虑到
$array1 + $array2 != $array2 + $array1
使用**$array1**+ $array2
并使用 $array2 +$array1