通常我可以使用类似的东西:
$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>
我的问题是: 如何根据条件将参数传递给函数/方法?
答案 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
)
);