Как преобразовать строку в boolean php

Как преобразовать строку в boolean ?

 $string = 'false'; $test_mode_mail = settype($string,'boolean'); var_dump($test_mode_mail); if($test_mode_mail) echo 'test mode is on.'; 

он возвращается,

boolean true

но он должен быть boolean false .

Строки всегда оценивают значение boolean true, если у них нет значения, которое считается «пустым» PHP (взято из документации для empty ):

  1. "" (пустая строка);
  2. "0" (0 в виде строки)

Если вам нужно задать логическое значение на основе текстового значения строки, вам нужно будет проверить наличие или иное значение этого значения.

 $test_mode_mail = $string === 'true'? true: false; 

EDIT: приведенный выше код предназначен для ясности понимания. При фактическом использовании следующий код может быть более уместным:

 $test_mode_mail = ($string === 'true'); 

Этот метод был отправлен @lauthiamkok в комментариях. Я отправляю его здесь как ответ, чтобы привлечь к нему больше внимания.

В зависимости от ваших потребностей вы должны использовать filter_var() с флагом FILTER_VALIDATE_BOOLEAN .

 filter_var( 'true', FILTER_VALIDATE_BOOLEAN); // true filter_var( 1, FILTER_VALIDATE_BOOLEAN); // true filter_var( '1', FILTER_VALIDATE_BOOLEAN); // true filter_var( 'on', FILTER_VALIDATE_BOOLEAN); // true filter_var( 'yes', FILTER_VALIDATE_BOOLEAN); // true filter_var( 'false', FILTER_VALIDATE_BOOLEAN); // false filter_var( 0, FILTER_VALIDATE_BOOLEAN); // false filter_var( '0', FILTER_VALIDATE_BOOLEAN); // false filter_var( 'off', FILTER_VALIDATE_BOOLEAN); // false filter_var( 'no', FILTER_VALIDATE_BOOLEAN); // false filter_var('asdfasdf', FILTER_VALIDATE_BOOLEAN); // false filter_var( '', FILTER_VALIDATE_BOOLEAN); // false filter_var( null, FILTER_VALIDATE_BOOLEAN); // false 

Строка "false" на самом деле считается значением "TRUE" помощью PHP. В документации говорится:

Чтобы явно преобразовать значение в boolean, используйте (bool) или (boolean) cast. Однако в большинстве случаев приведение не требуется, так как значение будет автоматически преобразовано, если для оператора, функции или структуры управления требуется логический аргумент.

См. Также Тип Жонглирование.

При преобразовании в boolean следующие значения считаются FALSE:

  • сама логическая ЛОЖЬ

  • целое число 0 (ноль)

  • поплавок 0.0 (ноль)

  • пустая строка и строка «0»,

  • массив с нулевыми элементами

  • объект с нулевыми переменными-членами (только для PHP 4)

  • специальный тип NULL (включая неустановленные переменные)

  • Объекты SimpleXML, созданные из пустых тегов

Каждое другое значение считается TRUE (включая любой ресурс).

поэтому, если вы это сделаете:

 $bool = (boolean)"False"; 

или

 $test = "false"; $bool = settype($test, 'boolean'); 

в обоих случаях $bool будет TRUE . Поэтому вы должны сделать это вручную, как предлагает GordonM.

При работе с Json мне пришлось отправить логическое значение в $ _POST.

У меня была аналогичная проблема, когда я сделал что-то вроде

  if ($_POST['myVar'] == true) { // do stuff; } 

Так как мой bool был превращен в укус json.

Чтобы преодолеть это, вы можете декодировать строку с помощью json_decode (). 😉

  if( json_decode($_POST['myVar']) == true ) { //do your stuff; } 

(обычно это должно работать с значениями bool, преобразованными в строку и отправленными на сервер также другими способами, кроме использования json)

Пожалуйста, отметьте в качестве ответа, если вы найдете это полезным, спасибо и пожелаете вам много солнца, ciao

вы можете использовать json_decode для декодирования того, что boolean

 $string = 'false'; $boolean = json_decode($string); if($boolean) { // Do something } else { //Do something else } 
 (boolean)json_decode(strtolower($string)) 

Он обрабатывает все возможные варианты $string

 'true' => true 'True' => true '1' => true 'false' => false 'False' => false '0' => false 'foo' => false '' => false 

проще всего это сделать:

 $str = 'TRUE'; $boolean = strtolower($str) == 'true' ? true : false; var_dump($boolean); 

Выполняя это так, вы можете выполнить цикл «true», «TRUE», «false» или «FALSE» и получить значение строки в логическом виде.

 function stringToBool($string){ return ( mb_strtoupper( trim( $string)) === mb_strtoupper ("true")) ? TRUE : FALSE; } 

или

 function stringToBool($string) { return filter_var($string, FILTER_VALIDATE_BOOLEAN); } 

Другие ответы более усложняют ситуацию. Этот вопрос – просто логический вопрос. Просто верьте свое утверждение.

 $boolString = 'false'; $result = 'true' === $boolString; 

Теперь ваш ответ будет либо

  • false , если строка была 'false' ,
  • или true , если ваша строка была 'true' .

Я должен отметить, что filter_var( $boolString, FILTER_VALIDATE_BOOLEAN ); все равно будет лучшим вариантом, если вам нужно иметь строки, такие как on/yes/1 как псевдоним для true .

Вы также можете использовать метод settype!

SetType ($ var, "Boolean") Echo $ var // см. 0 или 1

Я делаю это таким образом, чтобы на любой логической строке строка «false» на логическую FALSE выполняла бы регистр без учета регистра, но будет вести себя с использованием обычных правил кастомизации php для всех остальных строк. Я думаю, что это лучший способ предотвратить неожиданное поведение.

 $test_var = 'False'; $test_var = strtolower(trim($test_var)) == 'false' ? FALSE : $test_var; $result = (boolean) $test_var; 

Или как функция:

 function safeBool($test_var){ $test_var = strtolower(trim($test_var)) == 'false' ? FALSE : $test_var; return (boolean) $test_var; } 

Ответ от @GordonM хорош. Но это не сработает, если $string уже true (т. Е. Строка не является строкой, а логической TRUE) … что кажется нелогичным.

Расширяя его ответ, я бы использовал:

 $test_mode_mail = ($string === 'true' OR $string === true)); 

Если ваша «логическая» переменная поступает из глобального массива, такого как $ _POST и $ _GET, вы можете использовать filter_input() filter.

Пример для POST:

 $isSleeping = filter_input(INPUT_POST, 'is_sleeping', FILTER_VALIDATE_BOOLEAN); 

Если ваша «логическая» переменная поступает из другого источника, вы можете использовать filter_var() filter.

Пример:

 filter_var('true', FILTER_VALIDATE_BOOLEAN); // true 

От php.net

 public function strictBool($val=false){ return is_integer($val)?false:$val == 1; } 

strval сделает это и многое другое.

См. Документы. http://php.net/manual/en/function.strval.php

  $my_istrue = true; echo 'hi '.strval($my_istrue); // returns "hi 1" 

Я запутался в атрибутах shortcode wordpress, я решил написать пользовательскую функцию для обработки всех возможностей. может быть, это полезно для кого-то:

 function stringToBool($str){ if($str === 'true' || $str === 'TRUE' || $str === 'True' || $str === 'on' || $str === 'On' || $str === 'ON'){ $str = true; }else{ $str = false; } return $str; } stringToBool($atts['onOrNot']); 

Простым способом является проверка массива значений, которые вы считаете истинными.

 $wannabebool = "false"; $isTrue = ["true",1,"yes","ok","wahr"]; $bool = in_array(strtolower($wannabebool),$isTrue); 

Вы должны иметь возможность использовать boolean using (bool), но я не уверен, не проверяя, работает ли это в строках «true» и «false».

Это может стоить популярности, хотя

 $myBool = (bool)"False"; if ($myBool) { //do something } 

Стоит знать, что следующее будет оцениваться логическим False при вводе внутри

 if() 
  • сама логическая ЛОЖЬ
  • целое число 0 (ноль)
  • поплавок 0.0 (ноль)
  • пустая строка и строка «0»,
  • массив с нулевыми элементами
  • объект с нулевыми переменными-членами (только для PHP 4)
  • специальный тип NULL (включая неустановленные переменные)
  • Объекты SimpleXML, созданные из пустых тегов

Все остальные будут оцениваться как истинные.

Как описано здесь: http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting