2013-07-10 128 views
1

我有这个代码的小部分:检查布尔值是true或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 

$值的结果[1]为FALSE,虽然当它通过我的if语句返回的是:“公司受阻“,所以$ value [1]为TRUE,而它需要为FALSE。

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

我也试了一下:

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

这给了我假值,但不知何故,if语句它变成TRUE。

var_dump($value[1]) 

当我尝试它通常阻止一个公司它给了我正确的结果:

string(4) "True" Company blockedTrue

+1

添加一个'的var_dump($值[1])''的声明if'之前,请务必对值。也可以使用'==='而不是'=='。 – RRikesh

+0

当你使用if($ value [1]){echo“Company blocked”;} else {echo“Company NOT blocked”;} – rags

+0

这会给我结果:string(5)“False”False,并没有我的回声值,当我改变==为=== – Matheno

回答

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)

所以,“假” == TRUE

也许你可以把它们比为字符串:

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

感谢队友,这是我一直在寻找。 – Matheno

+0

@Marijke不客气〜:D – TopCaver

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

也现在;当我使用===时没有回声,我现在用==测试。 – Matheno

+0

给我公司使用==时阻塞的结果。所以仍然不是正确的价值。它将$ value [1]更改为TRUE,而它应该为FALSE – Matheno

+0

新解决方案是否有效? –

0

它看起来对我来说,$值[1]包含文本文字“真”或“假”,而不是TRUE或FALSE的布尔值。

更改您的代码if (strcasecmp($value[1], "TRUE") == 0)){测试如果是这样的话

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

回声不会输出布尔这样。当你将一个字符串转换为一个布尔值时,如果它的长度是真的。使其始终走真正的路线

编辑:

你的编辑证实了这一“字符串(4)‘真’公司blockedTrue”是指它不是一个布尔值,但字符串。上面的代码应该可以工作

+0

现在,它不断给我的结果,“公司不堵塞”,如果不管结果为TRUE或FALSE – Matheno

+0

是真的还是真实的案例事项在这里你的编辑表示真 – exussum

+0

编辑答案做一个区分大小写的比较 – exussum

相关问题