假设您让用户提供信息。
Array 1
但并非所有都是必需的。所以你有默认值。
Array 2
PHP是否有一个函数可以覆盖所有数组值,Array 2
如果它们是在 中提供的Array 1
,而不是空的?
我认为您正在寻找的是array_replace_recursive
,尤其是当您的“默认值”可能是一个超过一级深度的关联数组时。
$finalArray = array_replace_recursive(array $defaults, array $inputOptions)
这是一个示例,该示例将可选的选项数组传递给函数,并根据这些选项“ opts
”的结果以及defaults
您指定的结果进行一些处理:
function do_something() {
$args = func_get_args();
$opts = $args[0] ? $args[0] : array();
$defaults = array(
"second_level" => array(
"key1" => "val1",
"key2" => "val2"
),
"key1" => "val1",
"key2" => "val2",
"key3" => "val3"
);
$params = array_replace_recursive($defaults, $opts);
// do something with these merged parameters
}
php.net 参考文档在这里
$defaults = array(
'some_key_1'=>'default_value_1',
'some_key_2'=>'default_value_2',
);
$inputs = array_merge($defaults, $inputs)
请注意,如果 $inputs 数组包含不在 $defaults 数组中的键,它们将被添加到结果中。
如果您只想保留您期望的选项并丢弃其余选项,您可以使用array_merge
和的组合array_intersect_key
。
<?php
function foo($options) {
$defaults = [
'a' => 1,
'b' => null,
];
$mergedParams = array_merge(
$defaults,
array_intersect_key($options, $defaults)
);
return $mergedParams;
}
var_dump(foo([
'a' => 'keep me',
'c' => 'discard me'
]));
// => output
//
// array(2) {
// ["a"]=>
// string(7) "keep me"
// ["b"]=>
// NULL
// }
如果您想保留任何额外的密钥,那么array_merge($defaults, $options)
就可以了。
array_merge()正是您正在寻找的。
你可以做类似的事情
foreach($array1 as $key=>$value) $array2[$key]=$value;