If/Else三元运算符与空白Else语句问题


If/Else Ternary Operator with Blank Else Statement Issue

通常我可以使用以下内容:

$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会出现错误。

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

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

这将删除null

使用:

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

现在,您可以简单地通过array_filter(..)运行它,以删除NULL元素。

目标是可读性,而不是如何减少键入。三元运算符非常好,因为在某些情况下它增加了可读性。事实并非如此。

对以后阅读你的代码的人要友善,包括你自己。

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

//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));

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

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

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
    )
);