Как я могу преобразовать строку в boolean
?
$string = 'false';
$test_mode_mail = settype($string, 'boolean');
var_dump($test_mode_mail);
if($test_mode_mail) echo 'test mode is on.';
это возвращается,
булево верно
но так и должно быть boolean false
.
!!$string1
вернет логическое значение строки, обозначенной в ответе с самым высоким рейтингом.Ответы:
Строки всегда оцениваются как логическое значение true, если только они не имеют значения, которое PHP считает «пустым» (взято из документации для
empty
):""
(пустая строка);"0"
(0 как строка)Если вам нужно установить логическое значение, основанное на текстовом значении строки, вам нужно будет проверить наличие или нет этого значения.
РЕДАКТИРОВАТЬ: приведенный выше код предназначен для ясности понимания. При фактическом использовании следующий код может быть более подходящим:
или, возможно, использование
filter_var
функции может охватывать больше логических значений:filter_var
охватывает весь диапазон значений, в том числе значений truthy"true"
,"1"
,"yes"
и"on"
. Смотрите здесь для более подробной информации.источник
$string === 'true'
filter_var($string, FILTER_VALIDATE_BOOLEAN);
это хорошо?Этот метод был опубликован @lauthiamkok в комментариях. Я публикую это здесь в качестве ответа, чтобы привлечь к нему больше внимания.
В зависимости от ваших потребностей, вы должны рассмотреть возможность использования
filter_var()
сFILTER_VALIDATE_BOOLEAN
флагом.источник
filter_var($answer, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)
работал еще лучше для меня. См. Php.net/manual/en/function.filter-var.php#121263Строка
"false"
на самом деле считается"TRUE"
значением в PHP. Документация гласит:так что если вы делаете:
или
в обоих случаях
$bool
будетTRUE
. Таким образом, вы должны сделать это вручную, как предлагает GordonM.источник
При работе с JSON мне пришлось отправлять логическое значение через
$_POST
. У меня была похожая проблема, когда я сделал что-то вроде:В приведенном выше коде мой логический тип был преобразован в строку JSON.
Чтобы преодолеть это, вы можете декодировать строку, используя
json_decode()
:(Обычно это должно работать с логическими значениями, преобразованными в строку и отправленными на сервер и другими способами, т. Е. Отличными от использования JSON.)
источник
Вы можете использовать json_decode для декодирования этого логического
источник
Он обрабатывает все возможные варианты
$string
источник
on
иoff
?Если ваша «логическая» переменная происходит из глобального массива, такого как $ _POST и $ _GET, вы можете использовать
filter_input()
функцию фильтра.Пример для POST:
Если ваша «логическая» переменная исходит из другого источника, вы можете использовать
filter_var()
функцию фильтра.Пример:
источник
Ты можешь использовать
boolval($strValue)
Примеры:
Документация http://php.net/manual/es/function.boolval.php
источник
echo boolval('false');
=> 1echo (int)'false;
илиecho intval('false');
(int)'true'
иintval('true')
оба возвращают также 0 (все строки)проще всего сделать это:
Делая это таким образом, вы можете циклически проходить через серии 'true', 'TRUE', 'false' или 'FALSE' и получать строковое значение в логическое значение.
источник
Другие ответы более сложны. Этот вопрос просто логический вопрос. Просто сделайте правильное утверждение.
Теперь ваш ответ будет либо
false
если строка была'false'
,true
, если ваша строка была'true'
.Я должен отметить, что
filter_var( $boolString, FILTER_VALIDATE_BOOLEAN );
все еще будет лучшим вариантом, если вам нужны строки, такиеon/yes/1
как псевдоним дляtrue
.источник
или
источник
Вы должны указать
в противном случае вы всегда получите false, даже если $ string содержит что-то еще.источник
Вы также можете использовать метод settype!
SetType ($ var, "Boolean") Echo $ var // см. 0 или 1
источник
Я делаю это таким образом, что приведу любую нечувствительную к регистру версию строки «false» в логическое значение FALSE, но буду вести себя с использованием обычных правил приведения php для всех других строк. Я думаю, что это лучший способ предотвратить неожиданное поведение.
Или как функция:
источник
Ответ @GordonM хороший. Но он потерпит неудачу, если
$string
ужеtrue
(то есть строка не строка, а логическое ИСТИНА) ... что кажется нелогичным.Расширяя его ответ, я бы использовал:
источник
Меня запутали атрибуты шорткода WordPress, и я решил написать пользовательскую функцию для обработки всех возможностей. может быть это кому то пригодится
источник
Простой способ - проверить массив значений, которые вы считаете истинными.
источник
Отредактировано, чтобы показать возможность, не упомянутую здесь, потому что мой первоначальный ответ был далеко не связан с вопросом ОП.
preg_match (); Возможно использовать. Тем не менее, в большинстве приложений это будет гораздо тяжелее, чем другие ответы здесь.
/(?:true)|(?:1)/i
Может также использоваться при необходимости в определенных ситуациях. Он не вернется правильно, когда оценивает строку, содержащую как «ложь», так и «1».источник
В PHP вы можете просто преобразовать значение в логическое значение, используя double not operator (
!!
):источник
Вы должны быть в состоянии привести к логическому значению, используя (bool), но я не уверен, не проверив, работает ли это на строках "true" и "false".
Это может стоить, хотя поп
Стоит знать, что следующее будет вычислено как логическое значение False при помещении внутрь
Все остальное оценит как истинное.
Как описано здесь: http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting
источник
"false"
кtrue
.$myBool = (bool)"False"; if ($myBool) { echo "true"; }