wake-up-neo.com

Wie konvertiert man einen String in einen booleschen PHP-Code?

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.

250
laukok

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 ):

  1. "" (eine leere Zeichenfolge);
  2. "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');
284
GordonM

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
548
Brad

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 $boolTRUE. Sie müssen es also manuell tun, wie GordonM vorschlägt.

31
wosis

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.)

16
Nishanth Shaan

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
}
10
(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
7
mrded

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.

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

oder

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

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

3
anayarojo

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, 
  • oder 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.

3
kaiser

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
2
SandroMarques

Sie können auch die settype-Methode verwenden!

SetType ($ var, "Boolean") Echo $ var // siehe 0 oder 1

2
Nai

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));
2
Ema4rl

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;
}
2
Syntax Error

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"
0
JSG

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;     
    }
0
user889030

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']);
0
tomi

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";
}
0
user3785966