PHP 将数组传递给函数 - 如果未设置则保持默认值

PHP Pass Array to function - Maintain default values if not set

我有一个函数,它接受一个 "Options" 参数数组来设置查询数据库的标志。看起来像这样

function c_SQL($SQL='', $FIELDS=array(), $OPTIONS=array('SINGLEROW'=>false,'foo'=>false,'bar'=>false)) {

}

如果我没有在我的函数调用中设置默认数组键,我将尝试保留它们:

$test = c_SQL($query,$fields,array('SINGLEROW'=>true));

当我们针对未指定的数组键(foo 和 bar)进行检查时,这会在 c_SQL 函数内部产生错误。

有没有办法在未指定的情况下维护 'foo' 和 'bar',并且仅在传递给函数时才更改键?

尝试将 $OPTIONS 分配为 null 或空数组,然后检查函数检查它是否为空,如果为空则分配数组。看这里..

function c_SQL($SQL='', $FIELDS=array(), $OPTIONS=NULL) {
    if(empty($OPTIONS) {
        $OPTIONS=array('SINGLEROW'=>false,'foo'=>false,'bar'=>false)
    } else {
       $othervalues = array('SINGLEROW'=>false,'foo'=>false,'bar'=>false);
       $OPTIONS = array_merge($othervalues, $OPTIONS);
       //do something here
    }
}

您可以将默认值保持为常量,并使用 array_merge 将它们应用于用户的输入:

$DEFAULT_OPTIONS = array('SINGLEROW'=>false,'foo'=>false,'bar'=>false);
function c_SQL($sql='', $fields=array(), $options=array()) {
    $actual_options = array_merge($default_options, $options);
}

在函数体内创建默认选项,然后将新选项与 array_merge

合并
function c_SQL($SQL='', $FIELDS=array(), $OPTIONS=array()) {
    $DEFAULTS = array('SINGLEROW'=>false,'foo'=>false,'bar'=>false);
    $OPTIONS = array_merge($DEFAULTS, $OPTIONS);
}

您可以在函数内部使用 array_merge 与函数内部定义的默认数组合并。

function c_SQL($SQL = '', $FIELDS=array(), $OPTIONS = array()) {
    $defaults =  array(
        'SINGLEROW' => false,
        'foo' => false,
        'bar' => false  
    );
    $OPTIONS = array_merge($defaults, $OPTIONS);
    return $OPTIONS;
}

#  array ( 'SINGLEROW' => false, 'foo' => false, 'bar' => false, )
var_export(c_SQL());

# array ( 'SINGLEROW' => true, 'foo' => false, 'bar' => false, )
var_export(c_SQL(array('SINGLEROW' => true)));