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

Posted

技术标签:

【中文标题】PHP 将数组传递给函数 - 如果未设置,则保持默认值【英文标题】:PHP Pass Array to function - Maintain default values if not set 【发布时间】:2015-07-26 13:20:30 【问题描述】:

我有一个函数,它接受一个“选项”参数数组来设置查询数据库的标志。看起来是这样的

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' 并且只有在传递到函数时才更改键?

【问题讨论】:

您是否尝试过使用isset 功能?如果结果为假,您可以随时在此处手动设置变量。 如果没有办法维持默认设置,我倾向于这样做。我们只是在处理大量传入的“潜在”选项,并试图避免检查每个选项 【参考方案1】:

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

【讨论】:

【参考方案2】:

您可以将默认值保持为常量,并使用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);

【讨论】:

很好的建议!我喜欢这个想法,因为它只会覆盖他们指定的那些。 @BryanZwicker 这看起来不错,但我认为 $default_options 在调用 $options 之前应该放在 array_merge 之前,因为第二个数组会覆盖第一个数组,并且您希望新选项覆盖默认值. @Andrew 我总是把事情搞混了 ;-( 不过你是对的 - 我相应地修正了答案。谢谢! 我在查看 array_merge() 的文档时注意到了。我认为这只是一个伪代码疏忽 :) 再次感谢! $default_options 应该在函数的范围内。它在其他任何地方都没有用,并且有未来与另一个变量发生冲突的风险。查看我的解决方案。【参考方案3】:

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

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

【讨论】:

感谢您的建议!我喜欢这种方法,它完全完成了我想要做的事情。 @Mureinik 领先你几秒钟,但 +1【参考方案4】:

尝试将$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
    

【讨论】:

如果传递的数组只有三个必需选项中的一个或两个,它仍然会通过你的条件。

以上是关于PHP 将数组传递给函数 - 如果未设置,则保持默认值的主要内容,如果未能解决你的问题,请参考以下文章

PHP:将数组传递给函数时GCM无效注册

将参数从php中的数组传递给构造函数[重复]

将php数组传递给jquery函数

使用 AJAX 将复选框值 1 如果选中,如果不是 0 传递给 PHP

WordPress 中带有 jQ​​uery 的 AJAX:AJAX 调用未将属性值传递给 PHP 函数

将数组传递给 Web 服务 php nusoap