2013-07-10 132 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

相關問題