我有一小部分代码:
$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
转换为布尔值时,将考虑以下值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"不是布尔值,而是字符串。上面的代码应该工作