Cómo convertir cadenas a booleanas php

¿Cómo puedo convertir una cadena en boolean ?

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

vuelve,

booleano true

pero debería ser boolean false .

Las cadenas siempre evalúan a boolean true a menos que tengan un valor que PHP considera “vacío” (tomado de la documentación para el empty ):

  1. "" (una cadena vacía);
  2. "0" (0 como cadena)

Si necesita establecer un booleano basado en el valor de texto de una cadena, necesitará verificar la presencia o no de ese valor.

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

EDITAR: El código anterior está destinado a la claridad de la comprensión. En uso real, el siguiente código puede ser más apropiado:

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

Este método fue publicado por @lauthiamkok en los comentarios. Lo estoy publicando aquí como una respuesta para llamar más la atención sobre él.

Dependiendo de sus necesidades, debería considerar usar filter_var() con el indicador 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 

The String "false" realidad es considerado un valor "TRUE" por PHP. La documentación dice:

Para convertir explícitamente un valor a booleano, use los moldes (bool) o (booleanos). Sin embargo, en la mayoría de los casos el lanzamiento es innecesario, ya que un valor se convertirá automáticamente si un operador, función o estructura de control requiere un argumento booleano.

Ver también Tipo Malabares.

Al convertir a booleano, los siguientes valores se consideran FALSOS:

  • el booleano FALSE en sí mismo

  • el entero 0 (cero)

  • el flotador 0.0 (cero)

  • la cadena vacía y la cadena “0”

  • una matriz con cero elementos

  • un objeto con variables miembro cero (solo PHP 4)

  • el tipo especial NULL (incluidas las variables no ajustadas)

  • Objetos SimpleXML creados a partir de tags vacías

Cualquier otro valor se considera VERDADERO (incluido cualquier recurso).

entonces si lo haces:

 $bool = (boolean)"False"; 

o

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

en ambos casos, $bool será TRUE . Entonces tienes que hacerlo manualmente, como sugiere GordonM.

Cuando trabajo con Json tuve que enviar un valor booleano en $ _POST.

Tuve un problema similar cuando hice algo como

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

Como mi bool se convirtió en una picadura por json.

para superar esto, puede decodificar la cadena usando json_decode (). 😉

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

(Esto normalmente debería funcionar con los valores de bool convertidos en cadena y enviados al servidor también por otros medios, es decir, que no sean el uso de json)

Marque como respuesta si le parece útil, gracias y le deseo mucho sol, ciao

puedes usar json_decode para decodificar ese booleano

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

Maneja todas las variantes posibles de $string

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

lo más fácil de hacer es esto:

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

Al hacerlo de esta manera, puede recorrer una serie de ‘verdadero’, ‘VERDADERO’, ‘falso’ o ‘FALSO’ y obtener el valor de la cadena en un booleano.

Otras respuestas complican las cosas. Esta pregunta es simplemente una pregunta lógica . Solo haz tu statement correcta.

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

Ahora tu respuesta será cualquiera

  • false , si la cadena era 'false' ,
  • o true , si su cadena era 'true' .

Tengo que tener en cuenta que filter_var( $boolString, FILTER_VALIDATE_BOOLEAN ); aún será una mejor opción si necesita tener cadenas como on/yes/1 como alias para true .

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

o

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

¡También puedes usar el método settype!

SetType ($ var, “Boolean”) Echo $ var // vea 0 o 1

Lo hago de una manera que convertirá cualquier versión insensible a mayúsculas o minúsculas de la cadena “false” en “boolean” FALSE, pero se comportará usando las reglas de conversión de php normales para todas las demás cadenas. Creo que esta es la mejor manera de evitar comportamientos inesperados.

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

O como una función:

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

La respuesta de @GordonM es buena. Pero fallaría si $string ya es true (es decir, la cadena no es una cadena sino booleana TRUE) … lo que parece ilógico.

Extendiendo su respuesta, usaría:

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

Si su variable “booleana” proviene de una matriz global como $ _POST y $ _GET, puede usar la función de filtro filter_input() .

Ejemplo para POST:

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

Si su variable “booleana” proviene de otra fuente, puede usar la función de filtro filter_var() .

Ejemplo:

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

Desde php.net

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

Strval hará esto y más.

Ver los documentos. http://php.net/manual/en/function.strval.php

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

Me estaba confundiendo con los atributos de código abreviado de wordpress, decidí escribir una función personalizada para manejar todas las posibilidades. tal vez sea útil para alguien:

 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']); 

Una forma simple es comparar con una matriz de valores que considere verdaderos.

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

Deberías poder lanzar a boolean usando (bool) pero no estoy seguro sin verificar si esto funciona en las cadenas “true” y “false”.

Esto podría valer la pena aunque

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

Vale la pena saber que lo siguiente evaluará al booleano False cuando lo coloque dentro

 if() 
  • el booleano FALSE en sí mismo
  • el entero 0 (cero)
  • el flotador 0.0 (cero)
  • la cadena vacía y la cadena “0”
  • una matriz con cero elementos
  • un objeto con variables miembro cero (solo PHP 4)
  • el tipo especial NULL (incluidas las variables no ajustadas)
  • Objetos SimpleXML creados a partir de tags vacías

Todo lo demás se evaluará como verdadero.

Como se describe aquí: http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting