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,
booléen vrai
mais ça devrait l'être boolean false
.
!!$string1
retournerait un booléen indicatif de la chaîne décrite dans la réponse la mieux notée.Réponses:
Les chaînes sont toujours évaluées comme booléennes true, sauf si elles ont une valeur considérée comme "vide" par PHP (tirée de la documentation de
empty
):""
(une chaîne vide);"0"
(0 sous forme de chaîne)Si vous devez définir un booléen en fonction de la valeur de texte d'une chaîne, vous devrez vérifier la présence ou non de cette valeur.
EDIT: le code ci-dessus est destiné à la clarté de la compréhension. En utilisation réelle, le code suivant peut être plus approprié:
ou peut-être que l'utilisation de la
filter_var
fonction peut couvrir des valeurs plus booléennes:filter_var
couvre toute une gamme de valeurs, y compris les valeurs de truthy"true"
,"1"
,"yes"
et"on"
. Voir ici pour plus de détails.la source
$string === 'true'
filter_var($string, FILTER_VALIDATE_BOOLEAN);
est-ce une bonne chose?Cette méthode a été publiée par @lauthiamkok dans les commentaires. Je le poste ici comme réponse pour attirer plus d'attention.
Selon vos besoins, vous devriez envisager d'utiliser
filter_var()
avec leFILTER_VALIDATE_BOOLEAN
drapeau.la source
filter_var($answer, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)
a fonctionné encore mieux pour moi. Voir php.net/manual/en/function.filter-var.php#121263La chaîne
"false"
est en fait considérée comme une"TRUE"
valeur par PHP. La documentation dit:donc si vous le faites:
ou
dans les deux cas
$bool
seraTRUE
. Vous devez donc le faire manuellement, comme le suggère GordonM.la source
Lorsque je travaillais avec JSON, je devais envoyer une valeur booléenne via
$_POST
. J'ai eu un problème similaire lorsque j'ai fait quelque chose comme:Dans le code ci-dessus, mon booléen a été converti en une chaîne JSON.
Pour surmonter cela, vous pouvez décoder la chaîne en utilisant
json_decode()
:(Cela devrait normalement fonctionner avec des valeurs booléennes converties en chaîne et envoyées au serveur également par d'autres moyens, c'est-à-dire autrement qu'en utilisant JSON.)
la source
vous pouvez utiliser json_decode pour décoder ce booléen
la source
Il gère toutes les variantes possibles de
$string
la source
on
etoff
?Si votre variable "booléenne" provient d'un tableau global tel que $ _POST et $ _GET, vous pouvez utiliser la
filter_input()
fonction de filtre.Exemple pour POST:
Si votre variable "booléenne" provient d'une autre source, vous pouvez utiliser la
filter_var()
fonction de filtrage.Exemple:
la source
Vous pouvez utiliser
boolval($strValue)
Exemples:
Documentation http://php.net/manual/es/function.boolval.php
la source
echo boolval('false');
=> 1echo (int)'false;
ouecho intval('false');
(int)'true'
et lesintval('true')
deux renvoient également 0 (toutes les chaînes le font)la chose la plus simple à faire est la suivante:
En procédant de cette façon, vous pouvez parcourir une série de «true», «TRUE», «false» ou «FALSE» et obtenir la valeur de chaîne à un booléen.
la source
D'autres réponses viennent compliquer les choses. Cette question est simplement une question de logique . Obtenez juste votre déclaration.
Maintenant, votre réponse sera soit
false
, si la chaîne était'false'
,true
, si votre chaîne l'était'true'
.Je dois noter que ce
filter_var( $boolString, FILTER_VALIDATE_BOOLEAN );
sera toujours une meilleure option si vous avez besoin d'avoir des chaînes commeon/yes/1
aliastrue
.la source
ou
la source
Vous devez spécifier
sinon, vous obtiendrez toujours false même si $ string contient autre chose.la source
Vous pouvez également utiliser la méthode settype!
SetType ($ var, "Boolean") Echo $ var // voir 0 ou 1
la source
Je le fais d'une manière qui convertira toute version insensible à la casse de la chaîne "false" au booléen FALSE, mais se comportera en utilisant les règles de casting php normales pour toutes les autres chaînes. Je pense que c'est la meilleure façon de prévenir un comportement inattendu.
Ou en fonction:
la source
La réponse de @GordonM est bonne. Mais il échouerait si le
$string
est déjàtrue
(c'est-à-dire que la chaîne n'est pas une chaîne mais booléenne VRAI) ... ce qui semble illogique.Prolongeant sa réponse, j'utiliserais:
la source
J'étais confus avec les attributs de shortcode wordpress, j'ai décidé d'écrire une fonction personnalisée pour gérer toutes les possibilités. c'est peut-être utile pour quelqu'un:
la source
Un moyen simple consiste à comparer avec un tableau de valeurs que vous considérez comme vraies.
la source
Modifié pour montrer une possibilité non mentionnée ici, car ma réponse d'origine était loin d'être liée à la question du PO.
preg_match (); Est possible d'utiliser. Cependant, dans la plupart des applications, il sera beaucoup plus lourd à utiliser que les autres réponses ici.
/(?:true)|(?:1)/i
Peut également être utilisé si nécessaire dans certaines situations. Il ne retournera pas correctement lorsqu'il évalue une chaîne contenant à la fois "false" et "1".la source
En PHP, vous pouvez simplement convertir une valeur en booléen en utilisant l' opérateur double not (
!!
):la source
Vous devriez pouvoir effectuer un cast vers un booléen en utilisant (bool) mais je ne suis pas sûr sans vérifier si cela fonctionne sur les chaînes "true" et "false".
Cela pourrait cependant valoir le coup
Il vaut la peine de savoir que ce qui suit évaluera le booléen Faux lorsqu'il est mis à l'intérieur
Tout le reste sera évalué comme vrai.
Comme décrit ici: http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting
la source
"false"
entrue
.$myBool = (bool)"False"; if ($myBool) { echo "true"; }