PHP - 用另一个数组替换数组的值

5
有没有一种方法可以用另一个具有相同键的数组的值替换一个数组的值?
$arr1 = Array
        (
            [key1] => var1
            [key2] => var2
        )
$arr2 = Array
        (
            [key1] => var3
            [key2] => var4
        )

我想将$arr1的值更改为$arr2中的值,我要这样做大约10次,我可以逐行进行操作,但我想知道是否有更简单的方法。谢谢!
5个回答

9

请查看php的array_merge()函数。

$arr1 = array_merge($arr1,$arr2);

那不会创建两倍的键吗? 编辑:它起作用了,谢谢! - Diesal11
1
这取决于您在数组中使用的键。字符串键将采用第二个值,数字键将追加。 - Disgone

9
如果数组1和数组2中的键值相同:
$arr1 = $arr2;

如果保证数组2的所有键都在数组1中(数组2是数组1的子集):
$arr1 = array_merge($arr1, $arr2);

如果数组2中的某些键不在数组1中,而你只想替换数组1中存在的键(数组2不是数组1的子集,你只想合并交集部分):

$arr1 = array_merge($arr1, array_intersect_key($arr2, $arr1));

这种方式也可以(第一个),但下一步会用$arr3的值替换$arr2,所以我认为array_merge会更好。 - Diesal11
1
如果$arr1 = $arr2对您实际起作用,那么您实际上并不想合并数组,而是要整体替换变量。也许通过一些更多的代码,我们可以推荐更好的方法来完成您想要做的事情。 - deceze
最终它会回到MYSQL中的行,我实际上是用下一行的值替换一行列的值。我还没有完全写好它。所以这就是我现在能给你的了。 - Diesal11

2
如果您需要保留数组的顺序,请使用 array_replace
    $a = array( 'a' => 1, 'b' => 2,  'c' => 3  );
    $b = array(           'b' => 20, 'c' => 30 );

    $r = array_replace($a, $b)

    // $r = array( 'a' => 1, 'b' => 20, 'c' => 30 );

0

只需使用替换函数。

$arr1 = array_replace($arr1, $arr2);

如果您想处理多维数组,最好使用递归替换方法。

$arr1 = array_replace_recursive($arr1, $arr2);

有关详细信息,请查看以下链接 array_replace(), array_replace_recursive()


0
编辑说明: 此答案先前建议使用array_combine来解决此问题。然而,正如几位用户所指出的那样,这并不是正确的解决方法。此答案已经被编辑为更相关的解决方案。

要用一个数组的值替换另一个数组的值,您可以使用 PHP array_replace 方法。这假定关联数组具有相同的键。

PHP 文档如此解释 array_replace

array_replace() 用每个后续数组中具有相同键的值替换 array1 中的值。如果第一个数组中的键存在于第二个数组中,则其值将被第二个数组中的值替换。如果该键存在于第二个数组中而不是第一个数组中,则它将在第一个数组中创建。如果一个键仅存在于第一个数组中,则它将保持不变。如果传递了多个数组进行替换,则它们将按顺序处理,后面的数组将覆盖先前的值。


此外,这篇文章:https://softonsofa.com/php-array_merge-vs-array_replace-vs-plus-aka-union/ 还包括一个方便的图形,有助于解释array_merge、array_replace和数组联合运算符(+)之间的区别。如果您想了解更多,请阅读该文章,我已经在下面附上了图片供参考:

from: https://softonsofa.com/php-array_merge-vs-array_replace-vs-plus-aka-union/


array_merge(),就像NullUserException所发表的那样,可能是更好的选择。如果键相同,则任何一种方法都可以使用。 - jeremysawesome
1
抱歉,这是错误的。它会创建array('var1' => 'var3', 'var2' => 'var4') - Felix Kling
1
@Felix - 感谢你指出这个问题 - 我承认错误。这绝对不是 OP 想要的做法。使用 array_combine 的正确方法是 array_combine(array_flip($arr1), $arr2); - jeremysawesome

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接