Wie kann ich eine Zeichenfolge in boolean
konvertieren?
$string = 'false';
$test_mode_mail = settype($string, 'boolean');
var_dump($test_mode_mail);
if($test_mode_mail) echo 'test mode is on.';
es kehrt zurück,
boolean wahr
aber es sollte boolean false
sein.
Strings werden immer als boolean true ausgewertet, es sei denn, sie haben einen Wert, der von PHP als "leer" betrachtet wird (aus der Dokumentation für empty
):
""
(eine leere Zeichenfolge);"0"
(0 als Zeichenfolge)Wenn Sie einen Booleschen Wert basierend auf dem Textwert einer Zeichenfolge festlegen müssen, müssen Sie prüfen, ob dieser Wert vorhanden ist oder nicht.
$test_mode_mail = $string === 'true'? true: false;
BEARBEITEN: Der obige Code dient der Klarheit des Verständnisses. Bei der tatsächlichen Verwendung kann der folgende Code geeigneter sein:
$test_mode_mail = ($string === 'true');
Diese Methode wurde von @lauthiamkok in den Kommentaren gepostet. Ich poste es hier als Antwort, um mehr Aufmerksamkeit darauf zu lenken.
Abhängig von Ihren Anforderungen sollten Sie erwägen, filter_var()
mit dem Flag FILTER_VALIDATE_BOOLEAN
zu verwenden.
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
Der String "false"
wird von PHP ..__ tatsächlich als "TRUE"
-Wert betrachtet.
Um einen Wert explizit in boolean zu konvertieren, verwenden Sie (bool) oder (boolean) Abgüsse In den meisten Fällen ist die Besetzung jedoch nicht erforderlich, da ein Wert wird automatisch konvertiert, wenn ein Operator, eine Funktion oder ein Steuerelement Struktur erfordert ein boolesches Argument.
Siehe auch Typ Jonglieren.
Bei der Konvertierung nach Boolean werden die folgenden Werte als FALSE betrachtet:
das boolean FALSE selbst
die ganze Zahl 0 (Null)
der Schwimmer 0,0 (Null)
die leere Zeichenfolge und die Zeichenfolge "0"
ein Array mit Nullelementen
ein Objekt mit null Member-Variablen (nur PHP 4)
der spezielle Typ NULL (einschließlich nicht festgelegter Variablen)
SimpleXML-Objekte, die aus leeren Tags erstellt wurden
Jeder andere Wert wird als WAHR betrachtet (einschließlich aller Ressourcen).
also wenn du es tust:
$bool = (boolean)"False";
oder
$test = "false";
$bool = settype($test, 'boolean');
in beiden Fällen ist $bool
TRUE
. Sie müssen es also manuell tun, wie GordonM vorschlägt.
Bei der Arbeit mit JSON musste ich einen booleschen Wert über $_POST
senden. Ich hatte ein ähnliches Problem, als ich so etwas tat:
if ( $_POST['myVar'] == true) {
// do stuff;
}
Im obigen Code wurde mein Boolean in eine JSON-Zeichenfolge konvertiert.
Um dies zu umgehen, können Sie die Zeichenfolge mit json_decode()
dekodieren:
//assume that : $_POST['myVar'] = 'true';
if( json_decode('true') == true ) { //do your stuff; }
(Dies sollte normalerweise mit booleschen Werten funktionieren, die in string konvertiert und auch auf andere Weise an den Server gesendet werden, d. H. Andere als JSON.)
sie können json_decode verwenden, um diesen Boolean zu decodieren
$string = 'false';
$boolean = json_decode($string);
if($boolean) {
// Do something
} else {
//Do something else
}
(boolean)json_decode(strtolower($string))
Es behandelt alle möglichen Varianten von $string
'true' => true
'True' => true
'1' => true
'false' => false
'False' => false
'0' => false
'foo' => false
'' => false
am einfachsten ist folgendes:
$str = 'TRUE';
$boolean = strtolower($str) == 'true' ? true : false;
var_dump($boolean);
Auf diese Weise können Sie eine Reihe von 'true', 'TRUE', 'false' oder 'FALSE' durchlaufen und den String-Wert auf einen Boolean-Wert setzen.
function stringToBool($string){
return ( mb_strtoupper( trim( $string)) === mb_strtoupper ("true")) ? TRUE : FALSE;
}
oder
function stringToBool($string) {
return filter_var($string, FILTER_VALIDATE_BOOLEAN);
}
Sie können boolval($strValue)
verwenden.
Beispiele:
<?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";
?>
Dokumentation http://php.net/manual/es/function.boolval.php
Andere Antworten sind zu kompliziert. Diese Frage ist einfach Logik Frage. Machen Sie einfach Ihre Aussage richtig.
$boolString = 'false';
$result = 'true' === $boolString;
Nun wird Ihre Antwort entweder sein
false
, wenn der String 'false'
war, true
, wenn Ihre Zeichenfolge 'true'
war.Ich muss beachten, dass filter_var( $boolString, FILTER_VALIDATE_BOOLEAN );
immer noch eine bessere Option ist wenn Sie müssen Zeichenfolgen wie on/yes/1
als Alias für true
haben.
Wenn Ihre "boolesche" Variable aus einem globalen Array wie $ _POST und $ _GET stammt, können Sie die filter_input()
-Filterfunktion verwenden.
Beispiel für POST:
$isSleeping = filter_input(INPUT_POST, 'is_sleeping', FILTER_VALIDATE_BOOLEAN);
Wenn Ihre "boolesche" Variable aus einer anderen Quelle stammt, können Sie die filter_var()
-Filterfunktion verwenden.
Beispiel:
filter_var('true', FILTER_VALIDATE_BOOLEAN); // true
Sie können auch die settype-Methode verwenden!
SetType ($ var, "Boolean") Echo $ var // siehe 0 oder 1
Die Antwort von @GordonM ist gut . Aber es würde fehlschlagen, wenn $string
bereits true
ist (dh die Zeichenfolge ist keine Zeichenfolge, sondern Boolean TRUE) ... was unlogisch erscheint.
Ich würde seine Antwort erweitern:
$test_mode_mail = ($string === 'true' OR $string === true));
Ich mache es auf eine Art und Weise, die jede von der Groß- und Kleinschreibung abhängige Version des Strings "false" für den booleschen Wert FALSE verwendet, sich aber für alle anderen Strings mit den normalen PHP-Casting-Regeln verhält. Ich denke, dies ist der beste Weg, um unerwartetes Verhalten zu verhindern.
$test_var = 'False';
$test_var = strtolower(trim($test_var)) == 'false' ? FALSE : $test_var;
$result = (boolean) $test_var;
Oder als Funktion:
function safeBool($test_var){
$test_var = strtolower(trim($test_var)) == 'false' ? FALSE : $test_var;
return (boolean) $test_var;
}
strval wird dies und mehr tun.
Siehe die Dokumente. http://php.net/manual/de/function.strval.php
$my_istrue = true;
echo 'hi '.strval($my_istrue); // returns "hi 1"
hmmmm ich hatte so ein problem und ich tat es auf einfache weise und es funktioniert ok
$string = 'false';
if( $string == 'true'){
$string = true;
}else if($string == 'false'){
$string= false;
}
Ich wurde mit den WordPress Shortcode-Attributen verwirrt und beschloss, eine benutzerdefinierte Funktion zu schreiben, die alle Möglichkeiten bedient. Vielleicht ist es nützlich für jemanden:
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']);
Ich benutze den folgenden Ansatz:
$test = "true";
$test == 'false' ? $test = false : $test = true;
echo $test;
if(empty($test)){
echo "IT IS FALSE";
}
if($test){
echo "IT IS TRUE";
}