PHP array_replace无需创建密钥

时间:2013-08-14 19:23:53

标签: php

我试图用另一个数组覆盖一个数组的元素 - 没有在过程中创建其他元素。

例如:

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

合并数组以创建:

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

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

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

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

感谢您的帮助!

5 个答案:

答案 0 :(得分:14)

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

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

array_intersect_key$replace的元素与$base中已存在的密钥隔离开来(确保新元素不会出现在结果中),array_merge替换$base中的值$replace使用$base中的这些新值(同时确保只显示在$result = array_intersect_key(array_merge($base, $replace), $base); 中的密钥将保留其原始值)。

<强> See it in action

值得注意的是,调用顺序可以达到相同的结果:

{{1}}

然而,这个版本的工作稍微多一点,所以我推荐第一个版本。

答案 1 :(得分:3)

print_r(array_intersect_key($replace, $base));

答案 2 :(得分:0)

我无法想到内置的方法,但是,使用循环array_key_exists会很简单。

foreach( $replace as $k => $v )
{
   if ( array_key_exists( $k, $base ) )
      $base[ $k ] = $v;
}

答案 3 :(得分:0)

以下应该这样做:

foreach ($replace as $k => $v)
   if (isset($base[$k])) $base[$k]=$v;

答案 4 :(得分:0)

试试这个:

$result = array_replace($base, array_intersect_key($replace, $base));
相关问题