2010-12-16 127 views
4

爲什麼輸出'in'?PHP比較'=='問題

<?php 
    if (1=='1, 3') 
    { 
     echo "in"; 
    } 
?> 
+0

你想完成什麼? – raRaRa 2010-12-16 17:17:18

+3

http://php.net/manual/en/language。operators.comparison.php – 2010-12-16 17:18:10

回答

3

由於PHP正在做type conversion,它將字符串轉換爲整數,並且它的工作方法是將所有數字都計數到非數字值。在你的情況下,這是子字符串('1')(因爲,是第一個非數字字符)。如果字符串開始什麼,但一個數字,你會得到0

-1

輸出應爲:

in 

從PHP的文檔:

當從一個字符串轉換爲 整數,PHP分析串的一個 字符在一個時間直到它會發現一個非數字字符 。 (編號可能爲 (可選)以+或 - 符號開頭。) 結果編號被解析爲 十進制數(基數爲10)。如果未能 解析一個有效的十進制數返回 值0

+1

問題是「爲什麼?」 – thejh 2010-12-16 17:18:37

+1

我不明白downvotes。 :-s – 2010-12-16 17:21:40

+0

+1取消-1因爲你確實解釋了爲什麼效果正在發生(至少有相關的信息)... – ircmaxell 2010-12-16 17:58:09

0

我猜你想知道一個變量是否在範圍內的值。

您可以使用in_array

if (in_array(1, array(1, 3, 5, 6))) 
echo "in"; 
0
if(in_array(1, array(1,3)) { 
    echo "in"; 
} 
4

您比較一個字符串和一個整數。該字符串必須首先轉換爲整數,PHP將數字字符串轉換爲整數。由於該字符串的開頭是'1',因此它將數字1與數字1進行比較,它們是相等的。

你打算使用哪些功能?

+0

我還想補充一點,如果他已經使用了「===」(身份比較)他也會比較類型。 – Secko 2010-12-16 17:29:56

1

如果你想檢查1等於1或3,那麼我肯定會做這種方式:

if (1 == 1 || 1 == 3) 
5

==符不鍵入兩個值轉換,試圖讓它們是同一種類型。在你的例子中,它會將第二個值從一個字符串轉換爲一個整數,這將等於1。這顯然等於你匹配的值。

如果你的第一個值是一個字符串 - 例如'1'用引號括起來,而不是一個整數,那麼匹配會失敗,因爲雙方都是字符串,所以它會做一個字符串比較,它們是不同的字符串。

如果您需要一個不會進行類型轉換的精確匹配運算符,PHP還提供了一個tripple-equal運算符===,這可能是您正在尋找的內容。

希望有所幫助。