2011-11-30 41 views
2

這如果else語句不工作:(在這種情況下它會顯示「x是euqal爲空」)爲什麼這個簡單的PHP if語句不起作用,我該如何糾正它?

<?php 

$x = 0; 

if ($x == 'null'){ 
    echo 'x is euqal to null';} 

else if ($x == 0){ 
    echo 'x is equal to zero!';} 

else if ($x == 1){ 
    echo 'x is equal to one!';} 

?> 

我爲需要這個的原因是,我寫一個猜謎節目,和的特點之一它是根據用戶是否完成它以及他們的得分是什麼來顯示每個問題旁邊的勾號,十字或三個點。

如果該問題的得分='空',那麼他們還沒有做到這一點(顯示...) 如果該問題的得分= 1,那麼他們已經做到了,並得到它的權利(顯示勾號) 如果比分爲這個問題= 0,那麼他們已經沒有了,但找錯了(顯示交叉)

我實際的代碼是:

$score = ($_SESSION['score']);  
     if ($score[$questionList[$loop]['ID']]=='null'){ ?> 
      <p style="display:inline;"> ... </p> <?php } 
     else if ($score[$questionList[$loop]['ID']]==1){ ?> 
      <p style="display:inline;"> &#10003 </p> <?php }  
     else if ($score[$questionList[$loop]['ID']]==0){ ?> 
      <p style="display:inline;"> X </p> <?php } ?> 

雖然這是一個更大的頁面的一部分。

我很新的PHP,所以很可能是令人難以置信的厚在這裏,但任何建議,我們將不勝感激,謝謝:)

回答

5

我相信第一個條件返回true,因爲字符串等於0.請參閱關於comparison operators的文檔。

解決方法是用===替換==。例如:

<?php 

$x = 0; 

if ($x === 'null'){ 
    echo 'x is euqal to null';} 

else if ($x === 0){ \\true 
    echo 'x is equal to zero!';} 

else if ($x === 1){ 
    echo 'x is equal to one!';} 

?> 
+0

謝謝!這工作很好,我沒有意識到字符串等於零,但這很有意義:p謝謝 – Lissy

+1

不客氣。 :)你應該把這個標記爲你的答案。 – bozdoz

2

你的意思null或字符串'null'?我猜你的意思是價值null,因爲沒有。在這種情況下,您與'null'的比較等於0,因爲您「僅」使用==,您應該使用嚴格比較,即===

它的好習慣不是用else if,而是用elseif代替。閱讀更多在the docs

你還應該努力改進你的語法,它很混亂。

對於你的情況,我會檢查null作爲最後一件事,而不是把它放在elseif中,但只是讓它成爲最後一種情況。像這樣

$score = ($_SESSION['score']);  
if ($score[$questionList[$loop]['ID']] === 1) 
{ 
    print '<p style="display:inline;"> &#10003 </p>'; 
}  
elseif ($score[$questionList[$loop]['ID']] === 0) 
{ 
    print '<p style="display:inline;"> X </p>'; 
} 
else 
{ 
    print '<p style="display:inline;"> ... </p>'; 
} 

打開和關閉您的php標籤一直是一個非常糟糕的主意。

+0

可能是'isset()'的情況嗎?很難說,沒有看到更多的代碼... – DaveRandom

+0

然而,會導致同樣的事情。 – bozdoz

+0

好吧,我把null放在引號中,我嘗試使用'null'以外的其他單詞,如'零'。但是這也行不通:/ – Lissy

0

將字符串'null'轉換爲數字時,將其與數字進行比較。有關比較運算符,請參閱PHP文檔

2

你打微妙之處type juggling:

var_dump(0 == 'null'); 
var_dump('0' == 'null'); 

...打印:

bool(true) 
bool(false) 

你可以做很多事情,但使用===運營商可能是最容易的。只要確保您使用的數據類型一致,即不要混淆0'0'

+0

類型玩雜耍?聽起來很棒,謝謝你瞭解我的表情! –

相關問題