Merge “Defaults” array with “Input” array? PHP Which Function?

杀马特。学长 韩版系。学妹 提交于 2019-12-21 04:04:36

问题


Lets say you are having a user provide information.

Array 1

But not all is required. So you have defaults.

Array 2

Does PHP have a function which will overwrite all array values of Array 2 based on if they are supplied in Array 1, and not empty?


回答1:


I think what you are looking for is array_replace_recursive, especially for the case when your "defualts" may be an associative array more than one level deep.

$finalArray = array_replace_recursive(array $defaults, array $inputOptions)

heres an example that takes an optional array of options to a function and does some processing based on the result of those options "opts" and the defaults which you specify:

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
}

The php.net reference document is here




回答2:


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

$inputs = array_merge($defaults, $inputs)

Note that if the $inputs array contains keys not in the $defaults array they will be added in the result.




回答3:


array_merge() is exactly what you are looking for.




回答4:


If you just want to keep the options that you expect and discard the rest you may use a combination of array_merge and 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
// }

If you instead want to keep any extra key then array_merge($defaults, $options) will do just fine.




回答5:


You can just do something like

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


来源:https://stackoverflow.com/questions/16391848/merge-defaults-array-with-input-array-php-which-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!