作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个带有默认设置的数组,一个带有用户指定设置的数组。我想合并这两个数组,以便默认设置被用户指定的设置覆盖。
我曾尝试使用 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
中选择,这就是为什么 b
在 a
之前数组,$user
中没有a
。 $user
中未定义但 在 $default
中定义的任何键都将添加到 $user
的末尾>。然后删除 $user + $default
中未在 $default
中定义的任何键。
关于PHP:如何在不向数组添加新键的情况下用另一个数组的值覆盖一个数组中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2838079/
我是一名优秀的程序员,十分优秀!