1

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

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

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

4

4 回答 4

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

这将删除null

于 2012-07-11T08:26:11.437 回答
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));

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

于 2012-07-11T08:28:00.970 回答
1

利用:

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

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

于 2012-07-11T08:22:42.820 回答
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
    )
);
于 2012-07-11T08:31:18.927 回答