如果/ Else三元运营商发布空白其他声明

时间:2012-07-11 08:19:45

标签: php arrays ternary-operator

通常我可以使用类似的东西:

$a = ($condition)? array(1,2,3) : '';

但是现在我有一个接受多维数组的方法,我必须有条件地传递或不传递其中一个数组。

$this->mymethod(
    'myarrays'=> array(
        array('key' => 'lang_code'),
        array('key' => 'lang_description'),
        array('key' => 'lang_direction'),
        ($mycondition==true)? array('key' => 'lang_export') : ),
    )
);

基本上,问题在于传递的最后一个数组。更具体地说,三元If运算符中的ELSE语句。看起来我不能简单地传递一个空格:我无法传递任何其他内容,如FALSE或''(空字符串),因为稍后在代码中,运行此数组的foreach会产生错误。< / p>

我的问题是: 如何根据条件将参数传递给函数/方法?

4 个答案:

答案 0 :(得分:1)

使用:

$mycondition? array('key' => 'lang_export') : null

现在,您只需在array_filter(..)内运行即可删除该NULL元素。

答案 1 :(得分:1)

array_filter(array(
    array('key' => 'lang_code'),
    array('key' => 'lang_description'),
    array('key' => 'lang_direction'),
    $mycondition ? array('key' => 'lang_export') : null),
));

这将删除null

答案 2 :(得分:1)

追求可读性,而不是如何减少打字。三元运算符很棒,因为在某些情况下它会提高可读性。当然不是这种情况。

请稍后阅读您的代码的人,包括您自己。

这是一个例子(评论是未来读者的想法):

//OK, so here we have an array
$array = array(
    array('key' => 'lang_code'),
    array('key' => 'lang_description'),
    array('key' => 'lang_direction'),
);

//So the array can have one more element based on this condition
if ($mycondition) {
     $array[] = array('key' => 'lang_export');
}

//And then we pass this array to the method
$this->mymethod(array('myarrays' => $array));

你可以自由地使用变量而不必在一个语句中写下你所有的代码(好吧,我必须承认我之前认为这很酷)。

答案 3 :(得分:0)

您可以在函数调用之前评估条件,例如有辅助函数:

function evaluate_condition (array $mandatory, array $optional, $condition) {
    if (true === $condition) {
        $mandatory[] = $optional;
    }
    return $mandatory;
}

$this->mymethod(
    'myarrays'=> $this->evaluate_condition(
        array(
            array('key' => 'lang_code'),
            array('key' => 'lang_description'),
            array('key' => 'lang_direction')
        ),
        array('key' => 'lang_export'),
        $mycondition
    )
);