Cómo convertir booleano a cadena

242

Tengo una variable booleana que quiero convertir en una cadena:

$res = true;

Necesito que el valor convertido sea del formato: "true" "false"no"0" "1"

$converted_res = "true";
$converted_res = "false";

He intentado:

$converted_res = string($res);
$converted_res = String($res);

Pero eso me dice que stringya Stringno son funciones reconocidas.
¿Cómo convierto este booleano en una cadena en formato "true"o "false"en PHP?

etiqueta
fuente
1
Nueva función de uso ((string) $ param [tipo booleano]) {if ($ param) {....}} porque (string) false => "false" no es falso ...
zloctb

Respuestas:

361

La solución más simple:

$converted_res = $res ? 'true' : 'false';

hobodave
fuente
1
Esta es la forma más fácil de hacerlo, pero depende de lo que necesite, ya que podría no ser la mejor solución.
Androme
1
@DoomStone Sé que han pasado 3 años, pero solo quería saber qué te hace pensar que en algunos casos no es la mejor solución. La ?:notación es el código más simplificado que podemos encontrar en esta situación.
caiosm1005
1
Por ejemplo, para mí, no es la mejor solución para el caso en cuestión: no estoy seguro de cuál es el tipo del valor de retorno; Puede ser booleano u otra cosa. (Llamando a una función que alguien más escribió durante la depuración). Su solución convierte $ res en boolean, mientras que var_export puede manejar todos los tipos posibles.
13
@ user2443147 el tipo booleano es literalmente el primer hecho mencionado en la pregunta. Si no está seguro sobre el tipo con el que está tratando, tiene un conjunto de problemas para comenzar.
nem75
3
Tenga en cuenta que necesita corchetes adicionales cuando combina operador ternario y concatenación de cadenas. echo '<active>' . $res ? 'true' : 'false' . '</active>';no produce el resultado deseado, lo echo '<active>' . ($res ? 'true' : 'false') . '</active>';hace.
Salman A
194

La función var_export devuelve una representación de cadena de una variable, por lo que podría hacer esto:

var_export($res, true);

El segundo argumento le dice a la función que devuelva la cadena en lugar de repetirla.

Christian Davén
fuente
Respuesta perfecta. Este es el camino "PHP" de conseguir un "... una representación de cadena, apta de una variable"
peterchaula
62

Otra forma de hacer: json_encode( booleanValue )

echo json_encode(true);  // string "true"

echo json_encode(false); // string "false"

// null !== false
echo json_encode(null);  // string "null"
Freez
fuente
66
Creo que usar semánticamentevar_export() es más acorde con la intención de la operación (a menos que uno necesite la cadena para algunos JSON, eso es ;-)
Adam Cameron
3
Esto realmente se basa en el efecto secundario de que la representación JSON es la misma que la deseada. También se basa en la instalación y habilitación de la extensión JSON, que puede ser muy probable pero no es un hecho. En mi opinión, esta no es una solución limpia.
Nick Rice
35

Ver var_export

dev-null-dweller
fuente
3
Vea la respuesta de Christian para más detalles. Específicamente, incluya el segundo argumento (verdadero).
Jimothy
Esta es una respuesta de "solo enlace", que no cumple con las pautas SO para una "Respuesta". Por favor, editpara incluir información relevante desde el enlace en su mensaje. Si bien la información es útil, se deja más apropiadamente como un "Comentario" para el OP. Toda la información necesaria del enlace debe estar incrustada en la respuesta. 1) Si el enlace se volviera inalcanzable, esta publicación sería inútil. 2) no se debe exigir a los visitantes que visiten enlaces externos, solo que lo descubran ellos mismos. Dicho esto, se recomienda encarecidamente enlaces a documentación, fuentes o información adicional. Gracias por tu aporte.
SherylHohman
12

Utiliza strval () o (string) para convertir a string en PHP. Sin embargo, eso no convierte el booleano en la ortografía real de "verdadero" o "falso", por lo que debe hacerlo usted mismo. Aquí hay una función de ejemplo:

function strbool($value)
{
    return $value ? 'true' : 'false';
}
echo strbool(false); // "false"
echo strbool(true); // "true"
treznik
fuente
Si $val = true;entonces strval($val)y (string) $valambos regresan 1.
A
9

Las otras soluciones aquí tienen advertencias (aunque abordan la pregunta en cuestión). Si (1) realiza un bucle sobre tipos mixtos o (2) desea una solución genérica que puede exportar como función o incluir en sus utilidades, ninguna de las otras soluciones aquí funcionará.

La solución más simple y más autoexplicativa es:

// simplest, most-readable
if (is_bool($res) {
    $res = $res ? 'true' : 'false';
}

// same as above but written more tersely
$res = is_bool($res) ? ($res ? 'true' : 'false') : $res;

// Terser still, but completely unnecessary  function call and must be
// commented due to poor readability. What is var_export? What is its
// second arg? Why are we exporting stuff?
$res = is_bool($res) ? var_export($res, 1) : $res;

Pero la mayoría de los desarrolladores que leen su código requerirán un viaje a http://php.net/var_export para comprender quévar_export hace y cuál es el segundo parámetro.

1) var_export

Funciona como booleanentrada, pero convierte todo lo demás en a stringtambién.

// OK
var_export(false, 1); // 'false'
// OK
var_export(true, 1);  // 'true'
// NOT OK
var_export('', 1);  // '\'\''
// NOT OK
var_export(1, 1);  // '1'

2) ($res) ? 'true' : 'false';

Funciona para la entrada booleana, pero convierte todo lo demás (ints, strings) en verdadero / falso.

// OK
true ? 'true' : 'false' // 'true'
// OK
false ? 'true' : 'false' // 'false'
// NOT OK
'' ? 'true' : 'false' // 'false'
// NOT OK
0 ? 'true' : 'false' // 'false'

3) json_encode()

Los mismos problemas var_exporty probablemente peor ya json_encodeque no se puede saber si la cadena trueera una cadena o un booleano.

aleemb
fuente
var_export()parece ser el mejor para el caso de uso específico, gracias.
Dr. Gianluigi Zane Zanettini
Para las instalaciones de PHP 5.5+, var_export(boolval($var), true)es una ruta segura para transformar el valor en las cadenas "verdadero" o "falso".
faintsignal
if (is_bool($res) { $res = $res ? 'true' : 'false'; } << esto no funcionará - falta ) quizás sea mejor usar$result = (is_bool($var) && $var) ? 'true' : 'false';
mtizziani
@aleemb Qué pasa: de $value = is_bool($value) ? var_export($value, true) : $value;esta manera vivo el valor intacto y solo cambio el booleano a su representación de cadena.
dickwan
En su primera línea de código, tiene: $res = $res?? ¿Querías decir $res == $res? O incluso $res === $res:?
SherylHohman
2

¿Por qué no hacer así ?:

if ($res) {
    $converted_res = "true";
}
else {
    $converted_res = "false";
}
buena noches
fuente
2

Para mí, quería una representación de cadena a menos que fuera null, en cuyo caso quería que permanecieranull .

El problema con var_export es que se convierte nullen una cadena "NULL"y también convierte una cadena vacía en"''" , lo que no es deseable. No había una solución fácil que pudiera encontrar.

Este fue el código que finalmente usé:

if (is_bool($val)) $val ? $val = "true" : $val = "false";
else if ($val !== null) $val = (string)$val;

Corto y simple y fácil de incluir en una función también si lo prefiere.

dallin
fuente
1

boolval()funciona para tablas complicadas donde declarar variables y agregar bucles y filtros no funcionan. Ejemplo:

$result[$row['name'] . "</td><td>" . (boolval($row['special_case']) ? 'True' : 'False') . "</td><td>" . $row['more_fields'] = $tmp

donde $tmpse usa una clave para transponer otros datos. Aquí, quería que la tabla mostrara "Sí" para 1 y nada para 0, así que se usa (boolval($row['special_case']) ? 'Yes' : '').

motorbaby
fuente
1
¿Cuándo se boolval(some_expression) ? .. : ..comporta de manera diferente que some_expression ? .. : ..?
ToolmakerSteve
1

Esto también funciona para cualquier tipo de valor:

$a = true;

echo $a                     // outputs:   1
echo value_To_String( $a )  // outputs:   true

código:

function valueToString( $value ){ 
    return ( !is_bool( $value ) ?  $value : ($value ? 'true' : 'false' )  ); 
}
T.Todua
fuente
1

Editado en base a la sugerencia de @ sebastian-norr que señala que la $boolvariable puede o no ser verdadera 0o no 1. Por ejemplo, se 2resuelve truecuando lo ejecuta a través de una prueba booleana en PHP.

Como solución, he usado la conversión de tipos para asegurarnos de convertir $boola 0o 1.
Pero tengo que admitir que la expresión simple $bool ? 'true' : 'false'es mucho más limpia.

Mi solución utilizada a continuación nunca debe usarse, jajaja.
Aquí es por qué no ...

Para evitar la repetición, la matriz que contiene la representación de cadena del booleano se puede almacenar en una constante que puede estar disponible en toda la aplicación.

// Make this constant available everywhere in the application
const BOOLEANS = ['true', 'false'];

$bool = true;
echo BOOLEANS[(bool)  $bool]; // 'true'
echo BOOLEANS[(bool) !$bool]; // 'false'
asiby
fuente
0

No soy fanático de la respuesta aceptada, ya que convierte cualquier cosa que se evalúe en falsa en "false"no solo booleana y viceversa.

De todos modos, aquí está mi respuesta OTT, utiliza la var_exportfunción.

var_exportfunciona con todos los tipos de variables resource, excepto que he creado una función que realizará una conversión regular a string ( (string)), una conversión estricta ( var_export) y una verificación de tipo, dependiendo de los argumentos proporcionados.

if(!function_exists('to_string')){

    function to_string($var, $strict = false, $expectedtype = null){

        if(!func_num_args()){
            return trigger_error(__FUNCTION__ . '() expects at least 1 parameter, 0 given', E_USER_WARNING);
        }
        if($expectedtype !== null  && gettype($var) !== $expectedtype){
            return trigger_error(__FUNCTION__ . '() expects parameter 1 to be ' . $expectedtype .', ' . gettype($var) . ' given', E_USER_WARNING);
        }
        if(is_string($var)){
            return $var;
        }
        if($strict && !is_resource($var)){
            return var_export($var, true);
        }
        return (string) $var;
    }
}

if(!function_exists('bool_to_string')){

    function bool_to_string($var){
        return func_num_args() ? to_string($var, true, 'boolean') : to_string();        
    }
}

if(!function_exists('object_to_string')){

    function object_to_string($var){
        return func_num_args() ? to_string($var, true, 'object') : to_string();        
    }
}

if(!function_exists('array_to_string')){

    function array_to_string($var){
        return func_num_args() ? to_string($var, true, 'array') : to_string();        
    }
}
TarranJones
fuente
0
$converted_res = isset ( $res ) ? ( $res ? 'true' : 'false' ) : 'false';
MERT DOĞAN
fuente
issetNo es necesario aquí. En php, if-test es falso para ambos nully variable not defined. Simplemente puede hacer lo $converted_res = ( $res ? 'true' : 'false' );que se ve en las respuestas anteriores.
ToolmakerSteve
0
function ToStr($Val=null,$T=0){

    return is_string($Val)?"$Val"
    :
    (
        is_numeric($Val)?($T?"$Val":$Val)
        :
        (
            is_null($Val)?"NULL"
            :
            (
                is_bool($Val)?($Val?"TRUE":"FALSE")
                :
                (
                    is_array($Val)?@StrArr($Val,$T)
                    :
                    false
                )
            )
        )
    );

}
function StrArr($Arr,$T=0)
{
    $Str="";
    $i=-1;
    if(is_array($Arr))
    foreach($Arr AS $K => $V)
    $Str.=((++$i)?", ":null).(is_string($K)?"\"$K\"":$K)." => ".(is_string($V)?"\"$V\"":@ToStr($V,$T+1));
    return "array( ".($i?@ToStr($Arr):$Str)." )".($T?null:";");
}

$A = array(1,2,array('a'=>'b'),array('a','b','c'),true,false,ToStr(100));
echo StrArr($A); // OR ToStr($A) // OR ToStr(true) // OR StrArr(true)
AbdulRahman AlShamiri
fuente
-2

Solo quería actualizar, en PHP> = 5.50 puedes hacer boolval()lo mismo

Aquí referencia .

Jesse
fuente
3
Esto es lo mismo que usar(bool) $var;
Al.G.
¡Gracias! Esto funcionó para mí en una mesa complicada. Lo "<td>" . (boolval($row['special_case']) ? 'Yes' : ' ') . "</td>"
usé
44
boolval()va a la inversa, convirtiendo una variable de cualquier tipo en bool, no bool en string.
Mike Chamberlain