检查布尔值是true还是false

时间:2013-07-10 09:26:54

标签: php boolean

我有一小部分代码:

$company = array('relation' => $_SESSION['username']);
$companyresponse = $wcfclient->GetCompany($company);
    foreach ($companyresponse->GetCompanyResult as $key => $value){
    echo $value[0]; //This is the name of the company

    if ($value[1] == TRUE){
       echo "Company blocked";
    }
    elseif($value[1] == FALSE){
       echo "Company NOT blocked";
    }
    echo $value[1]; //This gives me the correct result, in this case: FALSE

$ value [1]的结果为FALSE,但是当它通过我的if语句时它返回:“公司被阻止”,所以$ value [1]为TRUE,而它需要为FALSE。

有人可以告诉我为什么它没有返回正确的值吗?

我也尝试过:

if ($value[1] == 1){
   echo "Company blocked";
}
else{
   echo "Company NOT blocked";
}

这给了我FALSE的值,但不知何故if语句将它改为TRUE。

var_dump($value[1]) 

当我尝试正常阻止的公司时,它会给我正确的结果:

string(4) "True" Company blockedTrue

3 个答案:

答案 0 :(得分:7)

$ value 1的类型是“String”而不是“bool”。

  

转换为布尔值时,会考虑以下值   FALSE:

the boolean FALSE itself
the integer 0 (zero)
the float 0.0 (zero)
the empty string, and the string "0"
an array with zero elements
an object with zero member variables (PHP 4 only)
the special type NULL (including unset variables)
SimpleXML objects created from empty tags
     

其他每个值都被视为TRUE(包括任何资源)。

参考:Converting to boolean (PHP Manual)

所以,“False”== TRUE

也许您可以将它们比作字符串:

if(strtoupper($value[1]) == "TRUE"){
    //...
}else{
    //...
}

答案 1 :(得分:1)

希望这应该有用

elseif(!isset($value[1]) || $value[1] === FALSE){
  echo "Company NOT blocked";
}

阅读完评论后,我提出了这个解决方案。看起来很愚蠢,但希望可以工作

if ($value[1] == "True"){
   echo "Company blocked";
}
elseif($value[1]  == "False"){
   echo "Company NOT blocked";
}

答案 2 :(得分:0)

在我看来,$ value [1]包含文本字面值“TRUE”或“FALSE”而不是TRUE或FALSE布尔值。

将您的代码更改为if (strcasecmp($value[1], "TRUE") == 0)){以测试是否是这种情况

echo $value[1]; //This gives me the correct result, in this case: FALSE

echo不会输出那样的布尔值。当你将一个字符串强制转换为布尔值时,如果它的长度是真的。导致它总是走真正的路线

编辑:

您的编辑确认此“string(4)”True“公司blockedTrue”表示它不是布尔值而是字符串。上面的代码应该可以工作