type imprimir false convert boolval bool php string casting boolean

imprimir - Cómo convertir la cadena a PHP booleano



php string to boolean (18)

¿Cómo puedo convertir cadena a 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 .


¡Puedes usar el método settype también!

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


Al trabajar con JSON, tuve que enviar un valor booleano a través de $_POST . Tuve un problema similar cuando hice algo como:

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

En el código anterior, mi booleano se convirtió en una cadena JSON.

Para superar esto, puedes decodificar la cadena usando json_decode() :

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

(Esto normalmente debería funcionar con valores booleanos convertidos en cadena y enviados al servidor también por otros medios, es decir, que no sean JSON).


Debería poder convertir a un valor booleano usando (bool) pero no estoy seguro sin comprobar si esto funciona en las cadenas "true" y "false".

Aunque esto podría valer un estallido

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

Vale la pena saber que lo siguiente evaluará el valor booleano. Falso cuando se coloque en el interior.

if()

  • el FALSO booleano 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 cero variables miembro (solo PHP 4)
  • el tipo especial NULL (incluidas las variables no definidas)
  • Objetos SimpleXML creados a partir de etiquetas vacías

Todo lo demás se evaluará como verdadero.

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


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

Dependiendo de sus necesidades, debe considerar el uso de 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


La Cadena "false" realidad se considera un valor "TRUE" por PHP. La documentación dice:

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

Véase también Tipo Malabares.

Cuando se convierte a booleano, los siguientes valores se consideran FALSO:

  • el FALSO booleano 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 cero variables miembro (solo PHP 4)

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

  • Objetos SimpleXML creados a partir de etiquetas vacías

Todos los demás valores se consideran VERDADEROS (incluido cualquier recurso).

así que si lo haces:

$bool = (boolean)"False";

o

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

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


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


Las cadenas siempre se evalúan como verdaderas booleanas a menos que tengan un valor que PHP considere "vacío" (tomado de la documentación para el empty ):

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

Si necesita establecer un valor booleano basado en el valor de texto de una cadena, entonces deberá 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'');


Lo hago de una manera que convertirá cualquier versión que no distinga entre mayúsculas y minúsculas de la cadena "falsa" al FALSO booleano, pero se comportará utilizando las reglas normales de conversión de PHP para todas las demás cadenas. Creo que esta es la mejor manera de prevenir 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; }


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

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

Haciéndolo de esta manera, puede recorrer una serie de ''true'', ''TRUE'', ''false'' o ''FALSE'' y obtener el valor de cadena en un valor booleano.


Me estaba confundiendo con los atributos de código 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'']);


Otras respuestas son sobre complicar las cosas. Esta pregunta es simplemente una pregunta lógica . Sólo haz tu declaración correcta.

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

Ahora tu respuesta será ya sea

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

Debo 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 .


Puedes usar boolval($strValue)

Ejemplos:

<?php echo ''0: ''.(boolval(0) ? ''true'' : ''false'')."/n"; echo ''42: ''.(boolval(42) ? ''true'' : ''false'')."/n"; echo ''0.0: ''.(boolval(0.0) ? ''true'' : ''false'')."/n"; echo ''4.2: ''.(boolval(4.2) ? ''true'' : ''false'')."/n"; echo ''"": ''.(boolval("") ? ''true'' : ''false'')."/n"; echo ''"string": ''.(boolval("string") ? ''true'' : ''false'')."/n"; echo ''"0": ''.(boolval("0") ? ''true'' : ''false'')."/n"; echo ''"1": ''.(boolval("1") ? ''true'' : ''false'')."/n"; echo ''[1, 2]: ''.(boolval([1, 2]) ? ''true'' : ''false'')."/n"; echo ''[]: ''.(boolval([]) ? ''true'' : ''false'')."/n"; echo ''stdClass: ''.(boolval(new stdClass) ? ''true'' : ''false'')."/n"; ?>

Documentación http://php.net/manual/es/function.boolval.php


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



Una forma sencilla es verificar contra una serie de valores que considere verdaderos.

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


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


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

o

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