的if/else三元运算符与空白Else语句问题
通常我可以使用类似脱身:的if/else三元运算符与空白Else语句问题
$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
好戏。不要在生产代码中使用。 – kapa 2012-07-11 08:42:58
事实上,作为ELSE语句传递null并通过array_filter()运行结果数组的做法诀窍。谢谢! – 2012-07-11 08:44:12
@bažmegakapa,为什么这不适合生产? – 2012-07-11 08:45:37
用途:
$mycondition? array('key' => 'lang_export') : null
现在,你可以简单地通过array_filter(..)
运行,删除该NULL
元素。
为什么你会用'true'来比较表达式,而不是直接使用它呢?加上括号已经过时。 – 2012-07-11 08:32:58
@TobiasSjösten:对,它来自OP的代码。我会更新我的代码。 – SuperSaiyan 2012-07-11 08:33:47
目的是为了便于阅读,而不是为你怎么能少打字。三元运算符非常好,因为在某些情况下它增加了可读性。这当然不是这种情况。
对以后阅读你的代码的人,包括你自己,很高兴。
下面是一个例子(注释是未来读者的想法):
//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
)
);
嗯,是您的示例有效代码吗? – kapa 2012-07-11 08:25:40
你不能传递一个“空”虚假陈述,我通常使用'null'。唯一允许的三元速记是'condition?:val_if_false',在这种情况下,如果条件不计算为false,则返回条件值。 – Leigh 2012-07-11 08:27:21
怎么样一个空数组而不是null /空字符串? – DThought 2012-07-11 08:21:47