[英]PHP: How to overwrite values in one array with values from another without adding new keys to the array?
我有一个默认设置的数组,以及一个具有用户指定设置的数组。 我想合并这两个数组,以便用用户指定的数组覆盖默认设置。
我曾尝试使用array_merge
,它可以像我想的那样进行覆盖,但如果用户指定了默认设置中不存在的设置,它还会添加新设置。 有没有比array_merge
更好的功能呢? 或者是否有一个函数可用于过滤用户指定的数组,以便它只包含默认设置数组中也存在的键?
我想要的例子
$default = array('a' => 1, 'b' => 2);
$user = array('b' => 3, 'c' => 4);
// Somehow merge $user into $default so we end up with this:
Array
(
[a] => 1
[b] => 3
)
实际上你可以只添加两个数组( $user+$default
)而不是使用array_merge
。
如果要停止默认设置中不存在的任何用户设置,可以使用array_intersect_key
:
返回一个关联数组,其中包含array1的所有条目,这些条目具有所有参数中都存在的键
$default = array('a' => 1, 'b' => 2);
$user = array('b' => 3, 'c' => 4);
// add any settings from $default to $user, then select only the keys in both arrays
$settings = array_intersect_key($user + $default, $default);
print_r($settings);
Array
(
[b] => 3
[a] => 1
)
键/值(和顺序)从第一选择$user
在加法,这就是为什么b
到来之前a
阵列中,没有a
在$user
。 在$user
中定义的任何未在$default
中定义的键将被添加到$user
的末尾。 然后删除$user + $default
中未在$default
定义的任何键。
如果你只想考虑那些,那么在default-settings数组中循环键可能是最简单的。 所以你可以这样做:
foreach ($default_settings AS $key => $default_value)
{
if (array_key_exists($key, $user_settings))
{
$combined_settings[$key] = $user_settings[$key];
}
else
{
$combined_settings[$key] = $default_value;
}
}
foreach($default as $key=>$val){
if (isset($user[$key]))
{
$settings[$key] = $user[$key];
} else {
$settings[$key] = $default[$key];
}
}
我想这就是你想要的。
foreach($user_settings as $key=>$val){
$global_settings[$key] = $val;
}
?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.