2010-05-08 17 views
150

tengo una variable booleana que quiero convertir en una cadenaCómo convertir de Boole a cadena

$res = true; 

lo necesito el valor convertido a ser también en el formato "true" "false" no "0" "1"

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

he intentado:

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

pero me dice string y String no son funciones reconocidas. ¿Cómo convierto este booleano a una cadena en el formato "verdadero" o "falso" en php?

+1

reciente función de su uso ((string) $ parámetro [tipo booleano]) {if ($ param) {....}} porque (string) false => "falso" no es falsa ... – zloctb

Respuesta

246
$converted_res = ($res) ? 'true' : 'false'; 
+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 en algunos casos que no es la mejor solución. La notación '?:' Es el código más simplificado que podemos encontrar en esta situación. – caiosm1005

+0

Por ejemplo, para mí, no es la mejor solución para el caso que nos ocupa: no estoy seguro de cuál es el tipo de valor de retorno; puede ser booleano o algo más. (Llamar a una función que alguien más escribió durante la depuración). La solución convierte $ res en boolean, mientras que var_export puede manejar todos los tipos posibles. –

8

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

function strbool($value) 
{ 
    return $value ? 'true' : 'false'; 
} 
echo strbool(false); // "false" 
echo strbool(true); // "true" 
+0

'$ val = true;' 'continuación strval ($ val)' y '(cadena) $ val' ambos devuelven 1. – ABach

35
+2

Ver [Respuesta de Christian] (http://stackoverflow.com/questions/2795177/how- to-convert-boolean-to-string # answer-8728795) para más detalles. Específicamente, incluya el segundo argumento (verdadero). – Jimothy

1

Por qué simplemente no hacer como esto ?:

if ($res) { 
    $converted_res = "true"; 
} 
else { 
    $converted_res = "false"; 
} 
126

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

var_export($res, true); 

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

3

USO filter_var()

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('ANYthingELSE', FILTER_VALIDATE_BOOLEAN); // false 
filter_var('', FILTER_VALIDATE_BOOLEAN); // false 
filter_var(null, FILTER_VALIDATE_BOOLEAN); // false 
+6

¿no hace esto lo contrario? – TarranJones

32

Otra manera de hacerlo: json_encode(booleanValue)

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

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

// null !== false 
echo json_encode(null); // string "null" 
+1

Creo que * semánticamente * usar 'var_export()' es más acorde con la intención de la operación (a menos que uno necesite la cadena para algunos JSON, es decir ;-) –

+1

Esto realmente depende del efecto secundario que el La representación de JSON es la misma que se desea. También depende de que la extensión JSON esté instalada y habilitada, lo que podría ser muy probable, pero no es un hecho. Entonces, esta no es una solución limpia. –

5

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

La solución más simple y explica por sí mismo 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 de la lectura de su código requerirá un viaje a http://php.net/var_export entender lo que el var_export hace y lo que es el segundo parámetro.

1. var_export

Obras para boolean de entrada, pero la convierte todo lo demás a un string tambié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';

Obras para la entrada booleana, pero la convierte todo lo demás (intercepciones, cuerdas) a 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()

mismos problemas que var_export y probablemente peor desde json_encode no se puede saber si la cadena true se pretende una cadena o un valor lógico.

+0

'var_export()' parece ser el mejor para el caso de uso específico, gracias. –

+0

Para 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

+0

'' 'if (is_bool ($ res) { $ res = $ res? 'True': 'false'; }' '' << esto no va a funcionar - falta '') '' tal vez es mejor use '' $ result = (is_bool ($ var) && $ var)? 'verdadero': 'falso'; '' – mtizziani

-3

Sólo quería actualizar, en PHP> = 5,50 que puede hacer boolval() a hacer lo mismo

Reference Here.

+3

Esto es lo mismo que usar '(bool) $ var;' –

+0

¡Gracias! Esto funcionó para mí en una mesa complicada. Lo usé así: '" ". (boolval ($ row ['special_case'])? 'Yes': ''). "" ' – motorbaby

+2

' boolval() 'va por el otro lado, convirtiendo una variable de cualquier tipo en bool, no boolval en cadena. –

0

No soy seguidor de la respuesta aceptada, ya que convierte todo lo que se evalúa como falso en "false" no solo booleano y viceversa.

De todos modos aquí está mi respuesta O.T.T, utiliza la función var_export.

var_export funciona con todos los tipos de variables, excepto resource, que han creado una función que lleva a cabo un reparto regular de la cadena ((string)), un reparto estricto (var_export) y una verificación de tipos, 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();   
    } 
} 
0
$converted_res = isset ($res) ? ($res ? 'true' : 'false') : 'false'; 
0

boolval() funciona para tablas complicadas donde la declaración de variables y la adición de bucles y los filtros no funcionan. Ejemplo:

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

donde $tmp es una clave que se utiliza con el fin de transponer otros datos. Aquí, quería que la tabla mostrara "Sí" para 1 y nada para 0, así que usé (boolval($row['special_case']) ? 'Yes' : '').

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)[email protected]($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(".([email protected]($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)