2

我有一小部分代码:

$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

4

3 回答 3

7

$value 1的类型是“字符串”而不是“布尔”。

转换为布尔值时,以下值被视为 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 手册)

所以,“假”== 真

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

if(strtoupper($value[1]) == "TRUE"){
    //...
}else{
    //...
}
于 2013-07-10T09:54:23.487 回答
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";
}
于 2013-07-10T09:32:40.603 回答
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 不会像那样输出布尔值。并且当您将字符串转换为布尔值时,如果它有任何长度,则为真。导致它总是走真正的路线

编辑:

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

于 2013-07-10T09:44:54.487 回答