2011-12-09 64 views
-1

我有這個PHP:爲什麼這個PHP認爲「email」==「domain」?

$ec = $trimmed['emails'];//has a value of "email" 
$dc = $trimmed['date'];//has a value of "timestamp" 

$data = array("email","domain","timestamp"); 

$num = count($data); 

for ($i=0; $i<$num; $i++){ 

    if ($data[$i] == $ec) { 
     $ec = $i; 
    } else if ($data[$i] == $dc) { 
     $dc = $i; 
    }  
} 

當我運行這個PHP $ EC最終等於域,而不是電子郵件的位置。此外,很明顯,第一個if認爲「email」和「domain」等同於「email」,因爲當我第一次回顯循環時,它顯示$ ec爲「email」。任何想法爲什麼?

+1

這不回答你的問題,但是這個代碼看起來像寫['array_search']的馬車路(HTTP ://www.php.net/manual/en/function.array-search.php)。也許切換到這將完全解決您的問題。至於答案本身,考慮到任何*字符串與'=='相比等於整數0。 – Jon

+0

你的代碼是一個bug,請發佈這個代碼和更多的數據,我相信它可以用其他方式寫。 –

+0

調試你的代碼,你會確切地知道爲什麼。 – animuson

回答

6

因爲在第二次迭代$ec(這是現在0)與"domain"相比,它的值爲真,用一個簡單的var_dump(0 == "domain");證明,其輸出true

正如威廉·範·倫斯勒以下建議,您可以使用===,或檢查出功能array_search,這將完成你想要做什麼。

實施例:

$ec = array_search($data, $trimmed['emails']); 
$dc = array_search($data, $trimmed['date']); 
+1

我還會補充說,你應該使用===(不是==)來檢查PHP中的等式。 – Will

3

在循環的第一次迭代中,當$i == 0$ec被設置爲0,正確。

在循環的第二次迭代中,當$i == 1它測試$data[1]而不是$ec的新值。所以"domain"被解釋爲數字(0),0 == 0true,所以$ec設置爲1

相關問題