2012-03-23 166 views
1

我試圖將一個已定義的代碼與一組被阻止的國家/地區代碼進行比較。在下面的例子中,國家代碼被逮住我,如果塊:爲什麼這個PHP比較失敗?

$country_code = 'US'; 

if ($country_code == ("NG" || "RO" || "VN" || "GH" || "SN" || "TN" || "IN" || "ID" || "KE" || "CN" || "CI" || "ZA" || "DZ" || "RU")) { 
    print "COUNTRY CODE: $country_code<br>"; 
} 

我認爲這對我的結果」

COUNTRY CODE: US 

我不希望‘US’被抓...我缺少什麼

回答

10

你在做什麼是OR -ing串在一起,因爲轉換爲布爾值非空字符串是真實的,這個計算結果爲以下幾點:?

$country_code == true 

由於$country_code也是非空字符串,也計算爲true

true == true 

因此,你TRUE

解決你的問題,你需要做什麼佩卡提示:

if (in_array($country_code, array('NG', 'RO', etc.))) 

參見:

+0

唉唉......太多的時間用Perl我猜。謝謝! – Paul 2012-03-23 17:32:18

5

我會做這個

$country_code = 'US'; 

if (in_array($country_code, array("NG", "RO", "VN", "GH", "SN", "TN", "IN", "ID", "KE", "CN", "CI", "ZA", "DZ", "RU")) { 
    print "COUNTRY CODE: $country_code<br>"; 
} 
6

您不能通過這種方式連接||並獲得您期望的結果。它會一直返回TRUE,因爲任何非空字符串的計算結果爲true。由於對==左邊的操作數相比,右側的整個操作,你實際上是說:

if ($country_code == (TRUE ||TRUE||TRUE||TRUE||TRUE...); 

雖然這將是有效的做類似下面,失控:

if ($country_code == "N" || $country_code == "RO" || $country_code == "VN" ...) 

取而代之,使用in_array();

$countries = array("NG","RO","VN","GH",...); 
if (in_array($country_code, $countries) { 
    print "COUNTRY CODE: $country_code<br>"; 
} 
3

此:

("NG" || "RO" || "VN" || "GH" || "SN" || "TN" || "IN" || "ID" || "KE" || "CN" || "CI" || "ZA" || "DZ" || "RU") 

實際上是一個布爾值測試,說: 「如果這些評估爲true,那麼真正的」。由於非空字符串是真的,所以這是真的。同樣,「美國」將被視爲真實。因此簡化了我們得到的陳述: if(true == true)。

嘗試使用數組和in_array函數。

+0

+1 in_array函數,這是一個更好的測試,然後我使用的ORs樂隊。 – 2012-03-23 17:35:43

0

如果以這種方式完成,這將會簡單得多。

$codes = array("NG", "RO", "VN"); 

$search = array_search("NG"); 
if($search) { 
    echo $codes[$search]; 
} 
0
$country_code = 'US'; 

這裏你設置$country_code

if ($country_code == ("NG" || "RO" || "VN" || "GH" || "SN" || "TN" || "IN" || "ID" || "KE" || "CN" || "CI" || "ZA" || "DZ" || "RU")) { 

這裏您評估$country_code針對真的沒什麼,但因爲它的所有非空字符串,他們以評估TRUE,因爲$country_code是一個非空字符串,它也計算爲TRUE

print "COUNTRY CODE: $country_code<br>"; 

在這裏您的打印$country_code,您在您的第一行中設置。

} 

你想要的是像這樣

if (
    $country_code == "NG" || 
    $country_code == "RO" || 
    $country_code == "VN" || 
    $country_code == "GH" || 
    $country_code == "SN" || 
    $country_code == "TN" || 
    $country_code == "IN" || 
    $country_code == "ID" || 
    $country_code == "KE" || 
    $country_code == "CN" || 
    $country_code == "CI" || 
    $country_code == "ZA" || 
    $country_code == "DZ" || 
    $country_code == "RU" 
) {