<?php
$var = 4;
echo $current = ($var > 2) ? "gr than 2" : ($var > 6) ? "gr than 6" : "not gr than 2 or 6";
?>
对于上面的代码,它总是返回 - gr比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") );
?>