为什么这个PHP比较失败了?

时间:2012-03-23 17:27:22

标签: php

我正在尝试将已定义的代码与一组被阻止的国家/地区代码进行比较。在下面的示例中,国家/地区代码被我的if块捕获:

$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

我不希望“美国”被抓住......我错过了什么?

6 个答案:

答案 0 :(得分:10)

你正在做的是OR - 将字符串放在一起。由于转换为布尔值的非空字符串为true,因此计算结果如下:

$country_code == true

由于$country_code也是一个非空字符串,因此也会计算为true

true == true

因此,你得到TRUE

要解决您的问题,您需要做Pekka建议的事情:

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

另见:

答案 1 :(得分: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>";
}

答案 2 :(得分: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>";
}

答案 3 :(得分:3)

此:

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

实际上是一个布尔测试,它说“如果其中任何一个评估为真,则为真”。由于非空字符串为真,所以这是真的。同样,“美国”将被视为真实。所以简化我们得到的陈述: if(true == true)。

尝试使用数组和in_array函数。

答案 4 :(得分:0)

如果以这种方式这样做会更简单。

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

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

答案 5 :(得分: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"
) {