PHP数组_替换而不创建键
我试图用另一个数组的值覆盖一个数组的元素,而不在此过程中创建其他元素 例如:PHP数组_替换而不创建键,php,Php,我试图用另一个数组的值覆盖一个数组的元素,而不在此过程中创建其他元素 例如: $base = array('a' => 'apple', 'b' => 'banana'); $replace = array('a' => 'orange', 'b' => 'grape', 'c' => 'cauliflower'); 合并阵列以创建: array('a' => 'orange', 'b' => 'grape'); // 'c' not included
$base = array('a' => 'apple', 'b' => 'banana');
$replace = array('a' => 'orange', 'b' => 'grape', 'c' => 'cauliflower');
合并阵列以创建:
array('a' => 'orange', 'b' => 'grape'); // 'c' not included
使用array\u merge或array\u replace将正确覆盖元素,但生成的数组将包含在第一个数组中找不到的元素
如何组合两个数组以创建仅包含第一个数组中的键和第二个数组中的相应值的数组
是否有一个现有的PHP数组函数可以做到这一点
谢谢你的帮助 我想不出一个内置的方法,但是,如果有一个循环和
array\u key\u存在,
,它将变得微不足道
foreach( $replace as $k => $v )
{
if ( array_key_exists( $k, $base ) )
$base[ $k ] = $v;
}
应采取以下措施:
foreach ($replace as $k => $v)
if (isset($base[$k])) $base[$k]=$v;
您可以使用并执行以下操作:
$result = array_merge($base, array_intersect_key($replace, $base));
array\u intersect\u key
将$replace
中的那些元素与$base
中已经存在的键隔离(确保新元素不会出现在结果中),并且array\u merge
将$base
中的值替换为$replace
中的这些新值(同时确保仅出现在$base
中的键将保留其原始值)
有趣的是,如果调用顺序颠倒,也可以得到相同的结果:
$result = array_intersect_key(array_merge($base, $replace), $base);
但是,此版本的工作稍微多一些,因此我推荐第一个版本。尝试以下方法:
print_r(array_intersect_key($replace, $base));
$result = array_replace($base, array_intersect_key($replace, $base));
为什么不只检查数组的键($replace,$base)?在检查文档[link]时,还要注意两个数组中的键“蓝色”和“绿色”的值不同。仍然会出现匹配,因为只检查了键。返回的值是array1的值因此,我认为不需要数组合并。@coderkane:因为如果
$replace
不包含$base
具有结果的所有键,那么结果将丢失值。我知道,但OP确实说他只需要第二个数组中的值。但是,他可能没有预见到这种情况,这一点很好。@coderkane:“用另一个数组中的值覆盖一个数组中的元素”-IMHO这表示不在另一个数组中的元素应该保留其现有值。谢谢大家!我知道必须有一个简单的解决方案。@Jason:请注意,如果$replace
中的所有键都没有值,那么“missing”“键根本不会出现在结果中。请注意,在这个版本中,生成的数组中的键的出现顺序是$replace,而不是$base,以防万一。”