PHP Pass Array功能 - 如果未设置,则保持默认值

时间:2015-05-14 19:19:34

标签: php arrays function default-value

我有一个功能,需要一个"选项"用于设置查询数据库的标志的参数数组。看起来像这样

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'如果没有指定,只有在传递给函数时才更改密钥?

4 个答案:

答案 0 :(得分:5)

您可以在函数内使用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)));

答案 1 :(得分:3)

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

<p class="example">Example One</p>
<p>Example Two</p>
<p class="example">Example Three</p>
<p>Example Four</p>

答案 2 :(得分:1)

尝试将$OPTIONS指定为null或空数组,然后检入函数检查它是否为null,如果为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
    }
}

答案 3 :(得分:1)

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

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