无需创建密钥的 PHP array_replace

php
2022-08-30 23:23:42

我正在尝试用一个数组的值覆盖另一个数组的元素 - 而不在此过程中创建其他元素。

例如:

$base = array('a' => 'apple', 'b' => 'banana');
$replace = array('a' => 'orange', 'b' => 'grape', 'c' => 'cauliflower');

合并数组以创建:

array('a' => 'orange', 'b' => 'grape'); // 'c' not included

使用array_mergearray_replace将正确覆盖元素,但生成的数组将包含在第一个数组中找不到的元素。

如何组合两个数组来创建一个数组,该数组仅包含第一个数组中的键,以及第二个数组中的相应值?

是否有现有的 PHP 数组函数可以执行此操作?

感谢您的帮助!


答案 1

您可以使用array_intersect_keyarray_merge来执行此操作:

$result = array_merge($base, array_intersect_key($replace, $base));

array_intersect_key将 中已存在的键的元素隔离(确保新元素不会出现在结果中),并将 中的值替换为 这些新值(同时确保仅出现在 中的键将保留其原始值)。$replace$basearray_merge$base$replace$base

查看实际效果

有趣的是,通过反转调用的顺序也可以达到相同的结果:

$result = array_intersect_key(array_merge($base, $replace), $base);

但是,此版本的工作稍微多一些,因此我推荐第一个版本。


答案 2
print_r(array_intersect_key($replace, $base));

推荐