条件运算符只有true语句

时间:2009-07-16 16:13:24

标签: php conditional conditional-operator

我想将变量设置为值,但仅在条件为真时才设置 而不是做以下事情:

if($myarray["foo"]==$bar){  
    $variablename=$myarray["foo"];  
}  

如果变量名很长,或者它可能涉及数组,这可能会很长,当我想要做的很简单时 - 如果条件为真则设置一个值。

我想使用条件运算符,如下所示:

$variablename=($myarray["foo"]=="bar")? $myarray["foo"]......

但这失败了,因为如果语句为假,我希望设置变量。

基本上,我要做的是缩短第一个例子。也许条件运算符不是那样......

有人有任何建议吗?

9 个答案:

答案 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