我有一小部分代码:
$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
答案 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”表示它不是布尔值而是字符串。上面的代码应该可以工作