<?php
$var = 4;
echo $current = ($var > 2) ? "gr than 2" : ($var > 6) ? "gr than 6" : "not gr than 2 or 6";
?>
如果條件爲上述代碼,它總是返回 - gr比6.可以有人請建議我錯了什麼?如果條件爲
<?php
$var = 4;
echo $current = ($var > 2) ? "gr than 2" : ($var > 6) ? "gr than 6" : "not gr than 2 or 6";
?>
如果條件爲上述代碼,它總是返回 - gr比6.可以有人請建議我錯了什麼?如果條件爲
使用
<?php
$var = 4;
echo $current = (($var > 2) ? "gr than 2" : (($var > 6) ? "gr than 6" : "not gr than 2 or 6"));
?>
你仍然應該檢查'$ var> 2'之前'$ var> 6',因爲在你的「解決方案「如果$ var等於8,那麼最終會得到'」gr比2「' – Rafalon
代碼將從前到後執行。 所以第一
<?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"));
?>
*編輯:*
謝謝你的upvotes。當再次看到這一點時,我迷失在自己的帖子中,因爲邏輯非常複雜。因此,對於他人閱讀本:
的OP發佈可以簡化爲以下邏輯:
<?php
echo true ? "first" : false ? "second" : "third";
的OP希望它可以導致first
。 然而,它確實導致second
,因爲第一部分正在執行,並且因爲該部分是true
結果是「第二」。
這個。
echo $current = ($var > 2) ? ($var >6)? "gr than 6":"lower than 6" : "lower than 2 or 6";
您可以使用()每個conditions..try它..
echo $current = (($var > 2) ? "gr than 2" : (($var > 6) ? "gr than 6" : "not gr than 2 or 6"));
它工作的人。謝謝。 –
Okai ..永遠放棄...我們需要一點代碼高性能..以複雜的方式完美.. – Jana
設置優先級
<?php
$var = 4;
echo $current = ($var > 2) ? "gr than 2" : (($var > 6) ? "gr than 6" : "not gr than 2 or 6");
?>
的解決方案是使用圓括號來組合你的運營商並且還改變了條件的順序:
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";
使用括號或只是使用if-then-else – Edwin
'echo $ current =($ var> 2)? (($ var> 6)?「gr than 6」:「gr than 2」):「不超過2或6」;' – kRicha
使用像這樣的三元運算符不是我推薦的,它很快就很難看到邏輯併爲此進行調試它,而不是像這樣的三元運算符,你應該考慮切換回簡單的'if/if else/else' – Epodax