合并两个数字键关联数组并保留原始键
我有两个这样的数组:
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 ) );
有什么解决方案吗?
I have two arrays like this:
array(
'11' => '11',
'22' => '22',
'33' => '33',
'44' => '44'
);
array(
'44' => '44',
'55' => '55',
'66' => '66',
'77' => '77'
);
I want to combine these two array such that it does not contains duplicate and as well as keep their original keys. For example output should be:
array(
'11' => '11',
'22' => '22',
'33' => '33',
'44' => '44',
'55' => '55',
'66' => '66',
'77' => '77'
);
I have tried this but it is changing their original keys:
$output = array_unique( array_merge( $array1 , $array2 ) );
Any solution?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
只需使用:
这应该可以解决它。因为如果一个键出现多次(如示例中的
'44'
),则您使用字符串键,一个键将覆盖前面的同名键。因为在您的情况下,它们都具有相同的值,无论如何这并不重要,而且它还会删除重复项。更新:我刚刚意识到,PHP 将数字字符串键视为数字(整数),因此行为会像这样,这意味着它也会对键重新编号...
解决方法是重新创建键。
更新2:我总是忘记,还有一个运算符(粗体,因为这确实你正在寻找!:D)
所有这些都可以看到在:
http://php.net/manual/en/function.array-merge。 php
Just use:
That should solve it. Because you use string keys if one key occurs more than one time (like
'44'
in your example) one key will overwrite preceding ones with the same name. Because in your case they both have the same value anyway it doesn't matter and it will also remove duplicates.Update: I just realised, that PHP treats the numeric string-keys as numbers (integers) and so will behave like this, what means, that it renumbers the keys too...
A workaround is to recreate the keys.
Update 2: I always forget, that there is also an operator (in bold, because this is really what you are looking for! :D)
All of this can be seen in:
http://php.net/manual/en/function.array-merge.php
您应该考虑
$array1 + $array2 != $array2 + $array1
与 $array1 + $array2
和 $array2 + $array1
You should take to consideration that
$array1 + $array2 != $array2 + $array1
with $array1 + $array2
and with $array2 + $array1
这有效:
This works:
使用 php7.4 执行此操作的新方法是 Spread 运算符 [...]
Spread 运算符应该具有比
array_merge
更好的性能,这是一个显着的优势Spread 运算符的一个特点是它支持任何可遍历的对象,而 array_merge 函数只支持数组。
The new way of doing it with php7.4 is Spread operator [...]
Spread operator should have better performance than
array_merge
A significant advantage of Spread operator is that it supports any traversable objects, while the array_merge function only supports arrays.
为此,您可以循环遍历一个并附加到另一个:
更新:KingCrunch 提出了最佳解决方案:
print_r($array1+$array2);
To do this, you can loop through one and append to the other:
UPDATE: KingCrunch came up with the best solution:
print_r($array1+$array2);
这有效:
This works:
警告! $array1 + $array2 覆盖键,所以我的解决方案(对于多维数组)是使用 array_unique()
注意:
它完美工作。希望它有同样的帮助。
Warning! $array1 + $array2 overwrites keys, so my solution (for multidimensional arrays) is to use array_unique()
Notice:
It perfectly works. Hope it helps same.
如果您使用的是 PHP 7.4 或更高版本,则可以使用展开运算符
...
,如 PHP 文档中的以下示例:它的工作方式类似于 JavaScript ES6。
有关更多信息,请参阅 https://wiki.php.net/rfc/spread_operator_for_array。
If you are using PHP 7.4 or above, you can use the spread operator
...
as the following examples from the PHP Docs:It works like in JavaScript ES6.
See more on https://wiki.php.net/rfc/spread_operator_for_array.
https://www.php.net/manual/en/function。数组合并.php
https://www.php.net/manual/en/function.array-merge.php
@jchook 在他的一条评论中稍微探讨了这一点,但值得强调的是
+
并不像人们预期的那样一致。当您处理相同的键时,结果与array_merge
不同。This is slightly explored by @jchook in one of his comments, but it is worth highlighting that the
+
is not as consistant as one might expect. When you are dealing with keys which are the same, the results are not the same asarray_merge
.我们可以使用扩展运算符 (...) 在 PHP 中组合两个数组。
在此示例中,$array1 包含值 1 到 10,$array2 包含值 11 到 20。
扩展运算符用于将两个数组连接(组合)为一个名为 $data 的数组。
We can combine two arrays in PHP using the spread operator (...).
In this example, $array1 contains the values 1 through 10, and $array2 contains the values 11 through 20.
The spread operator is used to concatenate(combine) the two arrays into a single array called $data.