2017-06-07 121 views
-1
<?php 
$var = 4; 
echo $current = ($var > 2) ? "gr than 2" : ($var > 6) ? "gr than 6" : "not gr than 2 or 6"; 
?> 

如果條件爲上述代碼,它總是返回 - gr比6.可以有人請建議我錯了什麼?如果條件爲

+2

使用括號或只是使用if-then-else – Edwin

+1

'echo $ current =($ var> 2)? (($ var> 6)?「gr than 6」:「gr than 2」):「不超過2或6」;' – kRicha

+3

使用像這樣的三元運算符不是我推薦的,它很快就很難看到邏輯併爲此進行調試它,而不是像這樣的三元運算符,你應該考慮切換回簡單的'if/if else/else' – Epodax

回答

1

使用

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

你仍然應該檢查'$ var> 2'之前'$ var> 6',因爲在你的「解決方案「如果$ var等於8,那麼最終會得到'」gr比2「' – Rafalon

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")); 
?> 

*編輯:*

謝謝你的upvotes。當再次看到這一點時,我迷失在自己的帖子中,因爲邏輯非常複雜。因此,對於他人閱讀本:

的OP發佈可以簡化爲以下邏輯:

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

的OP希望它可以導致first。 然而,它確實導致second,因爲第一部分正在執行,並且因爲該部分是true結果是「第二」。

+0

我正要發送我的答案。+1提及_因爲「gr than 2」等於true_並顯示它是如何「分組」的。 – FirstOne

+0

另外+1指出,只是增加括號會使它無法達到「gr than 6」,因爲它會落入「gr than 2」。 – Rafalon

1

這個。

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

您可以使用()每個conditions..try它..

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

+0

它工作的人。謝謝。 –

+1

Okai ..永遠放棄...我們需要一點代碼高性能..以複雜的方式完美.. – Jana

1

設置優先級

<?php 
$var = 4; 
echo $current = ($var > 2) ? "gr than 2" : (($var > 6) ? "gr than 6" : "not gr than 2 or 6"); 
?> 
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";