2016-12-14 8 views
1

Im пытается вывести требуемую строку, если $ required var задано и равно bool true или string true.Проверьте, действительно ли значение isset и true или 'true'

у меня есть:

isset($required) && $required == true ? 'required' : '' 

Так со следующим набором:

$required = true //required string set 
$required = 'true' //required string set 
$required = false //required string not set 

Все хорошо до тех пор:

$required = 'false' //required string set 

Как я могу проверить состояние и обеспечить как строки и bool типы?

+3

Используйте строгое сравнение вместо '$ требуется == = true'. Вы испытываете то, что вы видите. 'true ==" string "' истинно, но если вы используете строгое сравнение, типы должны также совпадать (например, boolean with boolean). – Qirel

+0

@Qirel, который не будет работать, я не могу передать строку «истина» - передача этой строки должна быть равна true. – panthro

ответ

3

Как об использовании filter_var ...:

filter_var($required, FILTER_VALIDATE_BOOLEAN); 

Даст вам:

$required = 'false'; 
filter_var($required, FILTER_VALIDATE_BOOLEAN); // false 

$required = false; 
filter_var($required, FILTER_VALIDATE_BOOLEAN); // false 

$required = 'true'; 
filter_var($required, FILTER_VALIDATE_BOOLEAN); // true 

$required = true; 
filter_var($required, FILTER_VALIDATE_BOOLEAN); // true 

Сохранение необходимость сравнить логическое значение и строку , так:

$required = filter_var($required, FILTER_VALIDATE_BOOLEAN); 
isset($required) && $required == true ? 'required' : ''; 

Дополнительная информация для случайного downvoter (привет ВЧ):

Использование FILTER_VALIDATE_BOOLEAN с filter_var возвращает следующее, на основе ввода:

TRUE for "1", "true", "on" and "yes" 
FALSE for "0", "false", "off" and "no" 
NULL for anything else 
+0

Блестящее решение, не понимайте, почему оно было опущено. – Qirel

+0

Тот же @Qirel - не знаю, почему downvote, я думаю, что у меня должен быть «вентилятор» ... – Stuart

+0

Я не сделал это без изменений. я буду повышать – panthro

2

Попробуйте это:

(isset($required) && ($required === true || $required === 'true')) ? 'required' : '';