PHP:如何在不向数组添加新键的情况下用另一个数组的值覆盖一个数组中的值?

标签 php arrays

我有一个带有默认设置的数组,一个带有用户指定设置的数组。我想合并这两个数组,以便默认设置被用户指定的设置覆盖。

我曾尝试使用 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 :

Returns an associative array containing all the entries of array1 which have keys that are present in all arguments

示例:

$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 中选择,这就是为什么 ba 之前数组,$user中没有a$user 中未定义但 $default 中定义的任何键都将添加到 $user 的末尾>。然后删除 $user + $default 中未在 $default 中定义的任何键。

关于PHP:如何在不向数组添加新键的情况下用另一个数组的值覆盖一个数组中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2838079/

相关文章:

php - PHP 中的错误和异常有什么区别?

javascript - 在 PHP 函数中使用表单选择值

php - 从选择输入提交文本,而不是 ID - CakePHP

javascript - 从另一个实时页面共享 <div>

ios - 从firebase获取名称显示

javascript - 为每个数组元素定义一个函数

php - laravel 加入 : How can I join tables and pull various kinds of data according to my conditions form the same join?

c# - 如何将 string[] 转换为 list<int>?

java - 在 Java 中将 png 文件作为二维整数数组输入

javascript - Angular/Javascript - 重新加载 ng-repeat 数据后更改类