这将输出'Option 1‘。我不知道它出了什么问题。
$result = (0 == 0) ? 'Option 0' : (1==2) ? 'Option 1' : 'Option 2';谢谢!
发布于 2012-11-03 01:05:46
您在这里遇到了和的问题。在您放置括号的地方,您的理解不足变得明显。让我们回顾一下:
$result = (0 == 0) ? 'Option 0' : (1 == 2) ? 'Option 1' : 'Option 2';
          ^      ^                ^     ^我并不是说这很容易,但是正如这段代码已经显示的那样,您在这里放置了多余的圆括号。它们是不需要的,这通常是自己的代码不确定的标志。正确的变体应该是:
$result = 0 == 0 ? 'Option 0' : 1 == 2 ? 'Option 1' : 'Option 2';现在,这已经表明您不确定将括号放在哪里。了解了这一点,也包含了你问题的解决方案。将你的弱点转化为优势,只需先做第一次检查,然后再做第二次检查--但这一次要实际使用括号:
$result = 0 == 0 ? 'Option 0' : (1 == 2 ? 'Option 1' : 'Option 2');
                                ^                                ^这将为您提供预期的结果,即括号控制优先级。
提示:您可以通过在编写以下语句时使用缩进来使更明显:
$result = 
    0 == 0 ? 'Option 0' 
           : (1 == 2 ? 'Option 1' 
                     : 'Option 2')
;(或类似的)只是为了让它在第一眼看起来更易读。正如它所显示的,这是一个复杂的决定。与复杂的事情一样,为它们编写代码时出现错误的情况也更多。这很正常。通过使用缩进来保持代码的可读性会有所帮助。另一种方法是降低复杂性。
$decide  = 2:
$results = array(
    0 => 'Option 0', 
    1 => 'Option 1',
);
$result  = isset($results[$decide]) ? $results[$decide] : 'Default Option';这里只需要一个决定,所以它就不那么复杂了。如果您有三种以上的可能性,则此示例更有意义,但即使对于三种可能性,这也可能是一种改进,因为在前面很明显存在默认情况。
发布于 2012-11-03 00:49:11
尝试添加第二组分组括号:
$result = (0 == 0) ? 'Option 0' : ((1==2) ? 'Option 1' : 'Option 2');干杯
发布于 2012-11-03 00:49:21
您必须将第二个路径用引号括起来:
  $result = (0 == 0)?'Option 0':((1==2)?'Option 1':'Option 2');顺便说一句:由于这种意外的行为,不推荐使用嵌套/堆叠三元。请参阅php文档http://php.net/manual/en/language.operators.comparison.php
注意:建议您避免“堆叠”三元表达式。在一条语句中使用多个三元运算符时,PHP的行为并不明显:
https://stackoverflow.com/questions/13199637
复制相似问题