检查布尔值是true还是false


Check if boolean is true or false

我有一小部分代码:

$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语句时,它返回:"Company blocked",所以$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

$value1的类型为"String"NOT"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(包括任何资源)。

参考:转换为布尔值(PHP手册)

因此,"False"==TRUE

也许你可以将它们作为字符串进行比较:

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

希望能正常工作

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";
}

在我看来,$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不会输出那样的布尔值。当您将字符串强制转换为布尔值时,如果它有任何长度,则为true。导致它总是走真正的路线

编辑:

您的编辑确认了"string(4)"True"Company blockedTrue"不是布尔值,而是字符串。上面的代码应该工作