条件运算符只有true语句

5 php conditional conditional-operator

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

if($myarray["foo"]==$bar){  
    $variablename=$myarray["foo"];  
}  
Run Code Online (Sandbox Code Playgroud)

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

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

$variablename=($myarray["foo"]=="bar")? $myarray["foo"]......
Run Code Online (Sandbox Code Playgroud)

但这失败了,因为如果语句为false,我根本不想设置变量.

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

有没有人有什么建议?

gah*_*ooa 10

它不会比以下更短:

if($condition) $var = $value;
Run Code Online (Sandbox Code Playgroud)


cha*_*aos 8

IMO,缩短代码样本的最佳方法是:

if($myarray["foo"] == $bar)
    $variablename = $myarray["foo"];
Run Code Online (Sandbox Code Playgroud)

仅供参考,您询问的运营商名称不是"三元运营商",而是条件运营商.

既然你问,一种你可以实际使用条件运算符来做你所要求的方法是:

$myarray['foo'] == $bar ? $variablename = $myarray['foo'] : null;
Run Code Online (Sandbox Code Playgroud)

但这有些可怕的丑陋和非常难以维护.

  • 只是想指出,它实际上被称为三元运算符http://ca.php.net/ternary#language.operators.comparison.ternary (7认同)
  • 我认为总是使用大括号更安全. (3认同)
  • @Evert:不完全是.在PHP的上下文中,术语"条件运算符"和"三元运算符"是完全可互换的,因为条件是*only*三元运算符.因此,作为手册页上的标签,它可以正常工作.然而,这并不意味着它在"学术上"是正确的.如果PHP有第二个三元运算符,我们就不会讨论这个问题. (2认同)

Dra*_*mon 0

在 false 情况下将变量设置为其自身:

$variablename=($myarray["foo"]=="bar")? $myarray["foo"] : $variablename
Run Code Online (Sandbox Code Playgroud)