Comment convertir un booléen en chaîne

243

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

$res = true;

J'ai besoin que la valeur convertie soit 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 il me dit que stringet Stringne sont pas des fonctions reconnues.
Comment convertir ce booléen en une chaîne au format "true"ou "false"en PHP?

marque
la source
1
Fonction d'utilisation plus récente ((chaîne) $ param [type booléen]) {if ($ param) {....}} parce que (chaîne) false => "false" n'est pas faux ...
zloctb

Réponses:

361

Solution la plus simple:

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

Hobodave
la source
1
C'est le moyen le plus simple de le faire, mais cela dépend de ce dont vous avez besoin car ce n'est peut-être pas la meilleure sulution.
Androme
1
@DoomStone Je sais que ça fait 3 ans, mais je voulais juste savoir ce qui vous fait penser que dans certains cas ce n'est pas la meilleure solution. La ?:notation est le code le plus simplifié que nous puissions trouver dans cette situation.
caiosm1005
1
Par exemple pour moi, ce n'est pas la meilleure solution pour le cas d'espèce: je ne sais pas quel est le type de la valeur de retour; cela peut être booléen ou autre chose. (Appel d'une fonction que quelqu'un d'autre a écrite pendant le débogage.) Votre solution convertit $ res en booléen, alors que var_export peut gérer tous les types possibles.
13
@ user2443147 le type booléen est littéralement le premier fait mentionné dans la question. Si vous n'êtes pas sûr du type avec lequel vous traitez, vous avez d'abord un tout autre ensemble de problèmes.
nem75
3
Notez que vous avez besoin de crochets supplémentaires lorsque vous mélangez l'opérateur ternaire et la concaténation de chaînes. echo '<active>' . $res ? 'true' : 'false' . '</active>';ne produit pas le résultat souhaité, le echo '<active>' . ($res ? 'true' : 'false') . '</active>';fait.
Salman A
195

La fonction var_export renvoie 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 l'écho.

Christian Davén
la source
Réponse parfaite. C'est la façon "PHP" d'obtenir une "... une représentation sous forme de chaîne analysable d'une variable"
peterchaula
62

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"
Freez
la source
6
Je pense que l' utilisation sémantiquevar_export() est plus conforme à l'intention de l'opération (à moins que l'on ait besoin de la chaîne pour certains JSON, c'est ;-)
Adam Cameron
3
Cela dépend vraiment de l'effet secondaire que la représentation JSON se trouve être la même que celle souhaitée. Il repose également sur l'extension et l'activation de JSON, ce qui peut être très probable, mais ce n'est pas acquis. À mon humble avis, ce n'est pas une solution propre.
Nick Rice
35

Voir var_export

dev-null-dweller
la source
3
Voir la réponse de Christian pour plus de détails. Spécifiquement, incluez le deuxième argument (vrai).
Jimothy
Il s'agit d'une réponse "lien uniquement", qui ne répond pas aux directives SO pour une "réponse". Veuillez editinclure les informations pertinentes du lien dans votre message. Bien que les informations soient utiles, elles sont plutôt laissées en tant que «commentaire» au PO. Toutes les informations nécessaires du lien doivent être intégrées dans la réponse. 1) Si le lien devenait inaccessible, ce message deviendrait inutile. 2) les visiteurs ne devraient pas être tenus de visiter des liens externes, seulement pour le découvrir eux-mêmes. Cela dit, les liens vers la documentation, les sources ou des informations supplémentaires sont fortement encouragés. Merci pour votre contribution.
SherylHohman
12

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

function strbool($value)
{
    return $value ? 'true' : 'false';
}
echo strbool(false); // "false"
echo strbool(true); // "true"
treznik
la source
Si $val = true;alors strval($val)et les (string) $valdeux retournent 1.
ABach
9

Les autres solutions ici ont toutes des mises en garde (bien qu'elles répondent à la question en cours). Si vous (1) bouclez sur des types mixtes ou (2) voulez une solution générique que vous pouvez exporter en tant que fonction ou inclure dans vos utilitaires, aucune des autres solutions ici 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 auront besoin d'un voyage sur http://php.net/var_export pour comprendre ce que cela var_exportfait et quel est le deuxième paramètre.

1. var_export

Fonctionne pour l' booleanentrée mais convertit tout le reste en un stringaussi.

// 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 les entrées booléennes mais convertit tout le reste (entiers, chaînes) en vrai / faux.

// 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 var_exportet probablement pire car json_encodene peut pas savoir si la chaîne trueétait destinée à une chaîne ou à un booléen.

aleemb
la source
var_export()semble être le meilleur pour le cas d'utilisation spécifique, merci.
Dr.Gianluigi Zane Zanettini
Pour les installations PHP 5.5+, var_export(boolval($var), true)est un moyen sûr de transformer la valeur en chaînes "true" ou "false".
faintsignal
if (is_bool($res) { $res = $res ? 'true' : 'false'; } << cela ne fonctionnera pas - il est ) peut-être préférable de ne pas l'utiliser$result = (is_bool($var) && $var) ? 'true' : 'false';
mtizziani
@aleemb Qu'en est-il: De $value = is_bool($value) ? var_export($value, true) : $value;cette façon, je vis la valeur intacte et ne change que les booléens en leur représentation sous forme de chaîne.
dickwan
Dans votre première ligne de code, vous avez: $res = $res?? Vouliez-vous dire $res == $res:? Ou même $res === $res:?
SherylHohman
2

Pourquoi ne fais-tu pas comme ça?:

if ($res) {
    $converted_res = "true";
}
else {
    $converted_res = "false";
}
Bonsoir
la source
2

Pour moi, je voulais une représentation de chaîne à moins qu'elle ne le soit null, auquel cas je voulais qu'elle reste null.

Le problème avec var_export est qu'il convertit nullen une chaîne "NULL"et il convertit également une chaîne vide en "''", ce qui n'est pas souhaitable. Il n'y avait pas de solution facile que je pouvais trouver.

C'est le code que j'ai finalement utilisé:

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

Court et simple et facile à ajouter dans une fonction aussi si vous préférez.

dallin
la source
1

boolval()fonctionne pour les tables compliquées 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

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

bébé
la source
1
Quand boolval(some_expression) ? .. : ..se comporte-t-il différemment de some_expression ? .. : ..?
ToolmakerSteve
1

Cela fonctionne également 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' )  ); 
}
T.Todua
la source
1

Modifié sur la base de la suggestion de @ sebastian-norr soulignant que la $boolvariable peut ou non être un vrai 0ou 1. Par exemple, 2résout truelors de son exécution via un test booléen en PHP.

Comme solution, j'ai utilisé la conversion $boolde type pour garantir que nous convertissons en 0ou 1.
Mais je dois admettre que l'expression simple $bool ? 'true' : 'false'est beaucoup plus propre.

Ma solution utilisée ci-dessous ne doit jamais être utilisée, LOL.
Voici pourquoi pas ...

Pour éviter la répétition, le tableau contenant la représentation sous forme de chaîne du booléen peut être stocké dans une constante qui peut être mise à disposition dans toute l'application.

// 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
la source
0

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

Quoi qu'il en soit, voici ma réponse OTT, il utilise la var_exportfonction.

var_exportfonctionne avec tous les types de variables sauf resource, j'ai créé une fonction qui effectuera une conversion régulière en chaîne ( (string)), une conversion 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();        
    }
}
TarranJones
la source
0
$converted_res = isset ( $res ) ? ( $res ? 'true' : 'false' ) : 'false';
MERT DOĞAN
la source
issetpas nécessaire ici. En php, if-test est faux pour les deux nullet variable not defined. Peut simplement faire $converted_res = ( $res ? 'true' : 'false' );comme vu dans les réponses plus anciennes.
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
la source
-2

Je voulais juste mettre à jour, en PHP> = 5,50, vous pouvez boolval()faire la même chose

Référence ici .

Jesse
la source
3
Cela revient à utiliser(bool) $var;
Al.G.
Je vous remercie! Cela a fonctionné pour moi dans un tableau compliqué. Utilisé comme ceci:"<td>" . (boolval($row['special_case']) ? 'Yes' : ' ') . "</td>"
motorbaby
4
boolval()va dans l'autre sens, convertissant une variable de n'importe quel type en bool, pas bool en chaîne.
Mike Chamberlain