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

Posted

技术标签:

【中文标题】PHP - 用另一个数组替换数组的值【英文标题】:PHP - replace values of array with another array 【发布时间】:2011-04-19 04:05:28 【问题描述】:

有没有办法可以将一个数组的值替换为另一个具有相同键的值?

$arr1 = Array
        (
            [key1] => var1
            [key2] => var2
        )
$arr2 = Array
        (
            [key1] => var3
            [key2] => var4
        )

我想将 $arr1 的值更改为 $arr2 中的值,我这样做了大约 10 次,我可以逐行执行,但我想知道是否有更简单的方法。 谢谢!

【问题讨论】:

【参考方案1】:

检查phparray_merge()函数。

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

【讨论】:

不会只创建双键吗?编辑:成功了,谢谢! 这取决于您对数组中的键使用什么。字符串键将采用第二个值,数字键追加。 好的,谢谢!当它让我 XD 时,我会在 9 分钟内点击这个作为答案【参考方案2】:

如果数组 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 会更好 @Diesal 如果$arr1 = $arr2 确实适合您,那么您真的不想像替换变量 批发那样合并 数组。也许通过更多代码,我们可以推荐一种更好的方法来做你想做的事情。 最后它回到 mysql 中的行,我实际上用下一行替换了一行列的值。我还没有完全写出来。所以我只能给你atm【参考方案3】:

如果需要保留数组的顺序,请使用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 );

【讨论】:

【参考方案4】:

只需使用替换功能。

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

如果要处理多维数组,最好使用递归替换。

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

有关详细信息,请查看这些链接array_replace()、array_replace_recursive()

【讨论】:

【参考方案5】:

编辑说明: 这个答案之前建议使用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 和数组联合运算符 (+) 之间的区别。如果您愿意,请阅读帖子,我已将下面的图片包含在内以供参考:

【讨论】:

array_merge() as NullUserException 发布可能是更好的方法。如果键相同,任何一种方法都可以工作。 对不起,这是错误的。它将创建array('var1' => 'var3', 'var2' => 'var4') @Felix - 感谢您了解这一点 - 我已纠正。这绝对是执行 OP 想要的错误方法。这是使用array_combine 的正确方法,array_combine(array_flip($arr1), $arr2);

以上是关于PHP - 用另一个数组替换数组的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 php 的数组中替换特定键的值?

重新排列后用另一个列表中的数字替换一个列表

用另一个不改变状态的数组项替换数组项

用另一个数组替换部分数组的最佳方法[重复]

用另一个模式替换二维数组中的模式

用另一个不同大小的指针替换一个指针