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
.
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
):
""
(une chaîne vide);"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');
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
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.
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.)
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
}
(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
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.
function stringToBool($string){
return ( mb_strtoupper( trim( $string)) === mb_strtoupper ("true")) ? TRUE : FALSE;
}
ou
function stringToBool($string) {
return filter_var($string, FILTER_VALIDATE_BOOLEAN);
}
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
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'
, 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
.
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
Vous pouvez aussi utiliser la méthode settype!
SetType ($ var, "Boolean") Echo $ var // voir 0 ou 1
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));
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;
}
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"
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;
}
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']);
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";
}