valor val parse is_true imprimir convertir booleano bool php parsing boolean

parse - php boolean val



Analizando una cadena en un valor booleano en PHP (7)

¿Hay una función en PHP para analizar cadenas "verdaderas" y "falsas" en booleano?

No, ambos son cadenas, y esos dos (como dices) se evalúan como true . Solo las cadenas vacías se evalúan como false en PHP.

Debería probar esto manualmente. Sin embargo, si es posible, sería mejor trabajar con valores booleanos "reales".

Hoy estaba jugando con PHP, y descubrí que los valores de cadena "verdadero" y "falso" no se analizan correctamente en booleano en una condición, por ejemplo teniendo en cuenta la siguiente función:

function isBoolean($value) { if ($value) { return true; } else { return false; } }

Si ejecuto:

isBoolean("true") // Returns true isBoolean("") // Returns false isBoolean("false") // Returns true, instead of false isBoolean("asd") // Returns true, instead of false

Solo parece funcionar con los valores "1" y "0":

isBoolean("1") // Returns true isBoolean("0") // Returns false

¿Hay una función nativa en PHP para analizar cadenas "verdaderas" y "falsas" en booleano?


En PHP, solo "0" o la cadena vacía forzar a falso; cada otra cadena no vacía coerces a verdadero. Del http://php.net/manual/en/language.types.boolean.php :

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

  • la cadena vacía y la cadena "0"

Necesita escribir su propia función para manejar las cadenas "true" y "false" . Aquí, supongo que todo lo demás está predeterminado en falso:

function isBoolean($value) { if ($value === "true") { return true; } else { return false; } }

En una nota lateral que podría condensarse fácilmente

function isBoolean($value) { return $value === "true"; }


Estoy usando esta construcción para transformar cadenas en booleanos, ya que quieres que sean true para la mayoría de los otros valores:

$str = "true"; $bool = !in_array($str, array("false", "", "0", "no", "off"));


Hay un método PHP nativo para hacer esto que usa el método filter_var de PHP:

$bool = filter_var($value, FILTER_VALIDATE_BOOLEAN);

De acuerdo con el manual de PHP:

Devuelve VERDADERO para "1", "verdadero", "encendido" y "sí". Devuelve FALSO de lo contrario.

Si se establece FILTER_NULL_ON_FAILURE, FALSE se devuelve solo para "0", "falso", "apagado", "no" y "", y se devuelve NULL para todos los valores no booleanos.


La forma más fácil de convertir de forma segura a un booleano;

$flag = ''true''; if( filter_var( $flag,FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE ) !== null) { $flag = filter_var($flag,FILTER_VALIDATE_BOOLEAN); } gettype($flag); // Would Return ''Boolean'' echo ''Val: ''.$flag; // Would Output ''Val: 1''


La razón es que todas las cadenas se evalúan como true al convertirlas a boolean, excepto "0" y "" (cadena vacía).

La siguiente función hará exactamente lo que usted desea: se comporta exactamente como PHP, pero también evalúa la cadena "false" como false :

function isBoolean($value) { if ($value && strtolower($value) !== "false") { return true; } else { return false; } }

La documentación explica que: http://php.net/manual/en/language.types.boolean.php :

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
  • el tipo especial NULL (incluidas las variables no ajustadas)
  • Objetos SimpleXML creados a partir de etiquetas vacías

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


Recientemente necesité una función de conversión booleana "suelta" para manejar cadenas como las que preguntas (entre otras cosas). Encontré algunos enfoques diferentes y obtuve un gran conjunto de datos de prueba para analizarlos . Nada encajaba en mis necesidades, así que escribí el mío:

function loosely_cast_to_boolean($value) { if(is_array($value) || $value instanceof Countable) { return (boolean) count($value); } else if(is_string($value) || is_object($value) && method_exists($value, ''__toString'')) { $value = (string) $value; // see http://www.php.net/manual/en/filter.filters.validate.php#108218 // see https://bugs.php.net/bug.php?id=49510 $filtered = filter_var($value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE); if(!is_null($filtered)) { return $filtered; } else { // "none" gets special treatment to be consistent with ini file behavior. // see documentation in php.ini for more information, in part it says: // "An empty string can be denoted by simply not writing anything after // the equal sign, or by using the None keyword". if(strtolower($value) === ''none'') { $value = ''''; } return (boolean) $value; } } else { return (boolean) $value; } }

Tenga en cuenta que para los objetos que son contables y que pueden convertirse en hebras, esto favorecerá la cuenta sobre el valor de la cadena para determinar la veracidad. Es decir, si $object instanceof Countable esto devolverá (boolean) count($object) independientemente del valor de (string) $object .

Puede ver el comportamiento de los datos de prueba que utilicé, así como los resultados de otras funciones aquí . Es bastante difícil analizar los resultados de ese pequeño iframe, por lo que puede ver el resultado del script en una página completa , en su lugar (esa URL no está documentada, por lo que podría no funcionar para siempre). En caso de que esos enlaces mueran algún día, también coloque el código en pastebin .

La línea entre lo que "debería ser cierto" y lo que no debería ser es bastante arbitraria; los datos que utilicé se clasifican en función de mis necesidades y preferencias estéticas, las tuyas pueden diferir.