合并“;默认值";用“;输入“;大堆PHP哪个函数


Merge "Defaults" array with "Input" array? PHP Which Function?

假设您让用户提供信息。

Array 1

但并不是所有的都是必需的。所以你有默认值。

Array 2

PHP是否有一个函数,可以根据Array 1中提供的Array 2的所有数组值是否为空来覆盖这些值?

我认为您正在寻找的是array_replace_recursive,尤其是当您的"defalts"可能是一个不止一级深度的关联数组时。

$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参考文档在这里

如果您只想保留所需的选项并放弃其余选项,则可以使用array_mergearray_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)就可以了。

$defaults = array(
    'some_key_1'=>'default_value_1',
    'some_key_2'=>'default_value_2',
);
$inputs = array_merge($defaults, $inputs)

请注意,如果$inputs数组包含不在$defaults数组中的键,它们将被添加到结果中。

array_merge((正是您想要的。

你可以做一些类似的事情

foreach($array1 as $key=>$value) $array2[$key]=$value;