2013-07-10 3 views
1

я эта маленькая часть кода:Проверьте булевым является истинной или ложным

$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, хотя, когда он проходил мой Условный оператор возвращает: «Компания заблокирована ", поэтому значение $ [1] является ИСТИННЫМ, в то время как оно должно быть FALSE.

Может ли кто-нибудь сказать мне, почему он не возвращает правильное значение?

Я также пробовал с:

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

Это дает мне значение ЛОЖЬ, но так или иначе, если-оператор изменяет его в TRUE.

var_dump($value[1]) 

Когда я пытаюсь компанией, которая блокируется обычно это дает мне правильный результат:

string(4) "True" Company blockedTrue

+1

добавить 'var_dump ($ значение [1])' перед 'if' заявление, чтобы быть уверенным в стоимости. Также используйте '===' вместо '=='. – RRikesh

+0

Каков результат использования if ($ value [1]) {echo «Компания заблокирована»;} else {echo «Компания НЕ заблокирована»;} – rags

+0

Это дает мне результат: строка (5) «False» False, и никакие значения моего эха при изменении == в === – Matheno

ответ

7

Тип $ value 1 - это "String" NOT "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{ 
    //... 
} 
+0

Спасибо, друг, это то, что я искал. – Matheno

+0

@ Марийке Добро пожаловать ~: 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

Также сейчас; no echo, когда я использую ===, я буду тестировать с помощью == сейчас. – Matheno

+0

Дает мне результат блокировки компании при использовании ==. Так что все еще не правильное значение. Он изменяет значение $ [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)„True“Компания blockedTrue» означает его не логическое, но строку. Приведенный выше код должен работать

+0

Теперь он продолжает давать мне результат «КОМПАНИИ НЕ заблокирован», независимо от результата TRUE или FALSE – Matheno

+0

, это ИСТИНА или ИСТИННЫЙ случай имеет значение здесь, ваши изменения показывают True – exussum

+0

отредактированный ответ, чтобы сделать нечувствительное к регистру сравнение – exussum

Смежные вопросы