如果条件,PHP嵌套三元组

时间:2017-06-07 11:02:07

标签: php

<?php
$var = 4;
echo $current = ($var > 2) ? "gr than 2" : ($var > 6) ? "gr than 6" : "not gr than 2 or 6";
?>

对于上面的代码,它总是返回 - gr比6.有人可以建议我做错了吗?

6 个答案:

答案 0 :(得分:2)

代码将从前到后执行。 首先是

<?php
($var > 2) ? "gr than 2" : ($var > 6)
?>

将导致"gr than 2"

然后,下一个问号将生成gr than 6,因为"gr than 2"等于true

同样由于上述原因,最好注意> 6> 2都是greater than 2,所以整行的写法实际上毫无意义。

解决方案如下:

<?php
$var = 4;
echo $current = ($var < 2 ? "not gr than 2 or 6" : ($var > 6 ? "gr than 6" : "gr than 2"));
?>

*编辑:*

谢谢你的支持。再看一遍,我迷失在自己的岗位上,因为逻辑非常复杂。所以对于其他人来说:

OP发布的逻辑可以简化为以下内容:

<?php
echo true ? "first" : false ? "second" : "third";

OP会期望这会产生first。 但是,它确实导致second,因为首先执行第一部分,并且因为该部分是true,结果是“秒”。

答案 1 :(得分:1)

此。

echo $current = ($var > 2) ? ($var >6)? "gr than 6":"lower than 6" : "lower than 2 or 6";

答案 2 :(得分:1)

你可以使用()为每个条件..它... ..

echo $current = (($var > 2) ? "gr than 2" : (($var > 6) ? "gr than 6" : "not gr than 2 or 6"));

答案 3 :(得分:1)

设置优先级

JFXComboBox

答案 4 :(得分:1)

解决方案是使用括号对运算符进行分组,并稍微改变条件的顺序:

echo $current = ($var > 2) ?
    (($var > 6) ? "gr than 6" : "gr than 2") : 
    "not gr than 2 or 6 (smaller than 2)";

您的版本中的问题是,默认情况下它会按如下方式分组:

echo $current = (($var > 2) ? "gr than 2" : ($var > 6)) ? 
  "gr than 6" : 
  "not gr than 2 or 6";

等于:

echo $current = ("gr than 2") ? 
  "gr than 6" : 
  "not gr than 2 or 6";

答案 5 :(得分:1)

使用下面的代码

<?php
$var = 4;
echo $current = (($var > 2) ? "gr than 2" : (($var > 6) ? "gr than 6" : "not gr than 2 or 6") );
?>