我想将变量设置为值,但仅在条件为真时才设置 而不是做以下事情:
if($myarray["foo"]==$bar){
$variablename=$myarray["foo"];
}
如果变量名很长,或者它可能涉及数组,这可能会很长,当我想要做的很简单时 - 如果条件为真则设置一个值。
我想使用条件运算符,如下所示:
$variablename=($myarray["foo"]=="bar")? $myarray["foo"]......
但这失败了,因为如果语句为假,我不希望设置变量。
基本上,我要做的是缩短第一个例子。也许条件运算符不是那样......
有人有任何建议吗?
答案 0 :(得分:10)
它不会比:
短得多if($condition) $var = $value;
答案 1 :(得分:8)
IMO,缩短代码样本的最佳方法是:
if($myarray["foo"] == $bar)
$variablename = $myarray["foo"];
仅供参考,您询问的运营商名称不是“三元运营商”,而是the conditional operator。
因为你问,一种你可以实际使用条件运算符来做你所要求的方法是:
$myarray['foo'] == $bar ? $variablename = $myarray['foo'] : null;
但这有些可怕的丑陋而且非常难以维护。
答案 2 :(得分:3)
你可以这样做,但我不会因为这是非常难以理解和愚蠢的:
$myarray["foo"] == $bar ? $variablename = $myarray["foo"] : 0;
或
$myarray["foo"] == $bar && $variablename = $myarray["foo"];
答案 3 :(得分:2)
你遇到的“问题”并不是一个问题。您的示例代码非常清晰且可维护。我真的会说保持原样。
你可以 - 删除大括号,但这会对可维护性产生影响。
您的另一种选择是创建一个set_if_true(混合数组,字符串键,布尔条件)包装函数。它隐藏了真正发生的事情,但根据您的具体实施情况,它是一个不错的选择。 (例如配置类型对象或缓存后端)
答案 4 :(得分:1)
你的权利,三元不是要走的路。它可以处理语句的if和else部分。
坚持使用常规if语句。
if($myarray["foo"]==$bar) $variablename=$myarray["foo"];
答案 5 :(得分:0)
您可以将原始表达式放在三元操作的else
部分中,但如果您想保证对表达式进行单一评估,那么您将必须使用临时变量和if
言。
答案 6 :(得分:0)
三元不是这样,即使它可以写成三元作品。
原因是:你试图以一种不想要的方式使用它,这将使你的代码难以被其他开发者阅读。
答案 7 :(得分:0)
将TabNavigator(
{
MyScreen: { screen: MyScreen }
},
{
tabBarOptions: {
showLabel: false,
showIcon: true
}
}
)
代替!=
和==
而不仅仅?:
?..
与
相同$variablename = ($myarray["foo"] != "bar") ?: $myarray["foo"];
它可能不是最聪明的解决方案,但它有效。我更喜欢这个
if($myarray["foo"] != "bar"){} else { $variablename = $myarray["foo"]; }
答案 8 :(得分:-1)
在false情况下将变量设置为自身:
$variablename=($myarray["foo"]=="bar")? $myarray["foo"] : $variablename