我试图用另一个数组覆盖一个数组的元素 - 没有在过程中创建其他元素。
例如:
$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数组函数可以执行此操作?
感谢您的帮助!
答案 0 :(得分:14)
您可以使用array_intersect_key
和array_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));