web-dev-qa-db-fra.com

Comment convertir une chaîne en boolean php

Comment puis-je convertir une chaîne en boolean?

$string = 'false';

$test_mode_mail = settype($string, 'boolean');

var_dump($test_mode_mail);

if($test_mode_mail) echo 'test mode is on.';

il revient,

vrai booléen

mais ce devrait être boolean false.

250
laukok

Les chaînes sont toujours considérées comme étant booléennes vraies, sauf si elles ont une valeur considérée comme "vide" par PHP (extraite de la documentation de empty ):

  1. "" (une chaîne vide);
  2. "0" (0 sous forme de chaîne)

Si vous devez définir un booléen basé sur la valeur de texte d'une chaîne, vous devez vérifier la présence ou non de cette valeur. 

$test_mode_mail = $string === 'true'? true: false;

EDIT: Le code ci-dessus est destiné à la clarté de la compréhension. En utilisation réelle, le code suivant peut être plus approprié: 

$test_mode_mail = ($string === 'true');
284
GordonM

Cette méthode a été publiée par @lauthiamkok dans les commentaires. Je l'affiche ici en guise de réponse pour attirer davantage l'attention.

En fonction de vos besoins, vous devriez envisager d'utiliser filter_var() avec l'indicateur FILTER_VALIDATE_BOOLEAN.

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('asdfasdf', FILTER_VALIDATE_BOOLEAN); // false
filter_var(        '', FILTER_VALIDATE_BOOLEAN); // false
filter_var(      null, FILTER_VALIDATE_BOOLEAN); // false
548
Brad

La chaîne "false" est en fait considérée comme une valeur "TRUE" par PHP . La documentation indique:

Pour convertir explicitement une valeur en booléen, utilisez les éléments (bool) ou (boolean) jette. Cependant, dans la plupart des cas, la conversion est inutile, car une valeur sera automatiquement converti si un opérateur, une fonction ou une commande la structure nécessite un argument booléen.

Voir aussi Type Juggling.

Lors de la conversion en booléen, les valeurs suivantes sont considérées comme FALSE:

  • le booléen FAUX lui-même

  • le nombre entier 0 (zéro)

  • le flottant 0.0 (zéro)

  • la chaîne vide et la chaîne "0"

  • un tableau avec zéro élément

  • un objet avec zéro variable membre (PHP 4 uniquement)

  • le type spécial NULL (y compris les variables non définies)

  • Objets SimpleXML créés à partir de balises vides

Toute autre valeur est considérée comme VRAIE (y compris toute ressource).

alors si vous le faites:

$bool = (boolean)"False";

ou

$test = "false";
$bool = settype($test, 'boolean');

dans les deux cas, $bool sera TRUE. Vous devez donc le faire manuellement, comme le suggère GordonM.

31
wosis

Lorsque je travaillais avec JSON, je devais envoyer une valeur booléenne via $_POST. J'ai eu un problème similaire quand j'ai fait quelque chose comme:

if ( $_POST['myVar'] == true) {
    // do stuff;
}

Dans le code ci-dessus, ma valeur booléenne a été convertie en chaîne JSON.

Pour surmonter cela, vous pouvez décoder la chaîne en utilisant json_decode():

//assume that : $_POST['myVar'] = 'true';
 if( json_decode('true') == true ) { //do your stuff; }

(Cela devrait normalement fonctionner avec les valeurs booléennes converties en chaîne et envoyées au serveur également par un autre moyen, c'est-à-dire autre que l'utilisation de JSON.)

16
Nishanth Shaan

vous pouvez utiliser json_decode pour décoder ce booléen

$string = 'false';
$boolean = json_decode($string);
if($boolean) {
  // Do something
} else {
  //Do something else
}
10
souparno majumder
(boolean)json_decode(strtolower($string))

Il gère toutes les variantes possibles de $string

'true'  => true
'True'  => true
'1'     => true
'false' => false
'False' => false
'0'     => false
'foo'   => false
''      => false
7
mrded

la chose la plus facile à faire est la suivante:

$str = 'TRUE';

$boolean = strtolower($str) == 'true' ? true : false;

var_dump($boolean);

En procédant de cette façon, vous pouvez parcourir une série de «vrais», «vrais», «faux» ou «faux» et obtenir la valeur de la chaîne à un booléen.

4
Brandon Sanders
function stringToBool($string){
    return ( mb_strtoupper( trim( $string)) === mb_strtoupper ("true")) ? TRUE : FALSE;
}

ou

function stringToBool($string) {
    return filter_var($string, FILTER_VALIDATE_BOOLEAN);
}
3
DevellMen

Vous pouvez utiliser boolval($strValue)

Exemples:

<?php
echo '0:        '.(boolval(0) ? 'true' : 'false')."\n";
echo '42:       '.(boolval(42) ? 'true' : 'false')."\n";
echo '0.0:      '.(boolval(0.0) ? 'true' : 'false')."\n";
echo '4.2:      '.(boolval(4.2) ? 'true' : 'false')."\n";
echo '"":       '.(boolval("") ? 'true' : 'false')."\n";
echo '"string": '.(boolval("string") ? 'true' : 'false')."\n";
echo '"0":      '.(boolval("0") ? 'true' : 'false')."\n";
echo '"1":      '.(boolval("1") ? 'true' : 'false')."\n";
echo '[1, 2]:   '.(boolval([1, 2]) ? 'true' : 'false')."\n";
echo '[]:       '.(boolval([]) ? 'true' : 'false')."\n";
echo 'stdClass: '.(boolval(new stdClass) ? 'true' : 'false')."\n";
?>

Documentation http://php.net/manual/es/function.boolval.php

3
anayarojo

D'autres réponses compliquent trop les choses. Cette question est simplement logique question. Obtenez juste votre déclaration juste.

$boolString = 'false';
$result = 'true' === $boolString;

Maintenant, votre réponse sera soit 

  • false, si la chaîne était 'false'
  • ou true, si votre chaîne était 'true'.

Je dois noter que filter_var( $boolString, FILTER_VALIDATE_BOOLEAN ); sera toujours une meilleure option si vous devez avoir des chaînes comme on/yes/1 comme alias pour true.

3
kaiser

Si votre variable "booléenne" provient d'un tableau global tel que $ _POST et $ _GET, vous pouvez utiliser la fonction de filtrage filter_input()

Exemple pour POST:

$isSleeping  = filter_input(INPUT_POST, 'is_sleeping',  FILTER_VALIDATE_BOOLEAN);

Si votre variable "booléenne" provient d'une autre source, vous pouvez utiliser la fonction de filtre filter_var().

Exemple:

filter_var('true', FILTER_VALIDATE_BOOLEAN); // true
2
SandroMarques

Vous pouvez aussi utiliser la méthode settype!

SetType ($ var, "Boolean") Echo $ var // voir 0 ou 1

2
Nai

La réponse de @GordonM est bonne . Mais elle échouerait si le $string est déjà true (c'est-à-dire que la chaîne n'est pas une chaîne mais booléenne VRAIE) ... ce qui semble illogique.

En prolongeant sa réponse, j'utiliserais:

$test_mode_mail = ($string === 'true' OR $string === true));
2
Ema4rl

Je le fais de manière à ce que toute version de la chaîne "false" insensible à la casse soit renvoyée vers le booléen FALSE, mais que les règles de diffusion php normales s'appliquent à toutes les autres chaînes. Je pense que c'est le meilleur moyen de prévenir les comportements inattendus.

$test_var = 'False';
$test_var = strtolower(trim($test_var)) == 'false' ? FALSE : $test_var;
$result = (boolean) $test_var;

Ou en fonction:

function safeBool($test_var){
    $test_var = strtolower(trim($test_var)) == 'false' ? FALSE : $test_var;
    return (boolean) $test_var;
}
2
Syntax Error

strval le fera et plus encore.

Voir la documentation. http://php.net/manual/en/function.strval.php

  $my_istrue = true;
  echo 'hi '.strval($my_istrue); // returns "hi 1"
0
JSG

hmmmm j'ai eu tel problème et je l'ai fait de manière simple et son fonctionnement ok 

    $string = 'false';
    if( $string == 'true'){
        $string = true;     
    }else if($string == 'false'){
        $string= false;     
    }
0
user889030

Je devenais confus avec les attributs shortcode wordpress, j'ai décidé d'écrire une fonction personnalisée pour gérer toutes les possibilités. peut-être utile pour quelqu'un:

function stringToBool($str){
    if($str === 'true' || $str === 'TRUE' || $str === 'True' || $str === 'on' || $str === 'On' || $str === 'ON'){
        $str = true;
    }else{
        $str = false;
    }
    return $str;
}
stringToBool($atts['onOrNot']);
0
tomi

J'utilise l'approche ci-dessous:

$test = "true";

$test == 'false' ? $test = false : $test = true;

echo  $test;

if(empty($test)){
    echo "IT IS FALSE";
}

if($test){
     echo "IT IS TRUE";
}
0
user3785966