web-dev-qa-db-fra.com

Comment convertir un booléen en chaîne

J'ai une variable booléenne que je veux convertir en chaîne

$res = true;

J'en ai besoin que la valeur convertie soit également au format "true" "false" pas "0" "1"

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

J'ai essayé:

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

mais cela me dit que string et String ne sont pas des fonctions reconnues. Comment convertir ce booléen en chaîne au format "vrai" ou "faux" en php?

182
tag
$converted_res = ($res) ? 'true' : 'false';
295
hobodave

La fonction var_export retourne une représentation sous forme de chaîne d'une variable, vous pouvez donc faire ceci:

var_export($res, true);

Le deuxième argument indique à la fonction de renvoyer la chaîne au lieu de la renvoyer en écho.

157
Christian Davén

Une autre façon de faire: json_encode( booleanValue ) 

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

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

// null !== false
echo json_encode(null);  // string "null"
46
Freez
35

Vous utilisez strval () ou (string) pour convertir chaîne en PHP . Cependant, cela ne convertit pas booléen en orthographe réelle de "true" ou "false", vous devez donc le faire vous-même . un exemple de fonction:

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

Les autres solutions présentées ici comportent toutes des réserves (bien qu’elles répondent à la question à l’étude). Si vous (1) passez en boucle sur des types mixtes ou (2) souhaitez une solution générique que vous pouvez exporter en tant que fonction ou inclure dans vos utilitaires, aucune des autres solutions ne fonctionnera.

La solution la plus simple et la plus explicite est:

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

Mais la plupart des développeurs qui lisent votre code vont devoir se rendre à http://php.net/var_export pour comprendre ce que fait le var_export et quel est le deuxième paramètre.

1. var_export

Fonctionne pour une entrée boolean mais convertit tout le reste en string.

// 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';

Fonctionne pour une entrée booléenne mais convertit tout le reste (ints, chaînes) en true/false.

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

3. json_encode()

Mêmes problèmes que var_export et probablement pire puisque json_encode ne peut pas savoir si la chaîne true était destinée à être une chaîne ou un booléen.

8
aleemb

UTILISER 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
2

boolval() fonctionne pour les tables complexes où la déclaration de variables et l'ajout de boucles et de filtres ne fonctionnent pas. Exemple:

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

$tmp est une clé utilisée pour transposer d'autres données. Ici, je voulais que la table affiche "Oui" pour 1 et rien pour 0, donc utilisé (boolval($row['special_case']) ? 'Yes' : '').

1
motorbaby

Pourquoi ne fais-tu pas comme ça ?:

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

- Edité sur la base de la suggestion de @ sebastian-norr indiquant que la variable $bool peut ou non être un vrai 0 ou 1. Par exemple, 2 est résolu en true lors de l’exécution d’un test booléen en PHP.

En guise de solution, j’ai utilisé un type de transtypage pour nous assurer que nous convertissions $bool en 0 ou 1. Mais je dois admettre que la simple expression $bool ? 'true' : 'false' est beaucoup plus propre. Ma solution utilisée ci-dessous ne doit jamais être utilisée LOL.

Pourquoi pas ...

$bool = true;
echo ['false', 'true'][(bool) $bool]; // 'true'
echo ['false', 'true'][(bool) !$bool]; // 'false'
1
asiby
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)
0
$converted_res = isset ( $res ) ? ( $res ? 'true' : 'false' ) : 'false';
0
MERT DOĞAN

Cela fonctionne aussi pour tout type de valeur:

$a = true;

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

code:

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

Je ne suis pas un fan de la réponse acceptée, car elle convertit tout ce qui est faux en "false" no boolean et vice-versa. 

Quoi qu'il en soit, voici ma réponse O.T.T, elle utilise la fonction var_export .

var_export fonctionne avec tous les types de variable sauf resource, j'ai créé une fonction qui effectuera une conversion normale en chaîne ((string)), une distribution stricte (var_export) et une vérification de type, en fonction des arguments fournis. 

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
TarranJones