So konvertieren Sie Boolean in String

242

Ich habe eine boolesche Variable, die ich in einen String konvertieren möchte:

$res = true;

Ich möchte, dass der konvertierte Wert das Format hat : "true" "false", nicht"0" "1"

$converted_res = "true";
$converted_res = "false";

Ich habe es versucht:

$converted_res = string($res);
$converted_res = String($res);

Aber es sagt mir das stringund Stringsind keine erkannten Funktionen.
Wie konvertiere ich diesen Booleschen Wert in einen String im Format "true"oder "false"in PHP?

Etikett
quelle
1
Neuere Verwendungsfunktion ((Zeichenfolge) $ param [boolescher Typ]) {if ($ param) {....}}, weil (Zeichenfolge) false => "false" nicht false ist ...
zloctb

Antworten:

361

Einfachste Lösung:

$converted_res = $res ? 'true' : 'false';

Hobodave
quelle
1
Dies ist der einfachste Weg, aber es hängt davon ab, was Sie brauchen, denn es ist möglicherweise nicht die beste Lösung.
Androme
1
@DoomStone Ich weiß, es sind 3 Jahre vergangen, aber ich wollte nur wissen, warum Sie denken, dass es in einigen Fällen nicht die beste Lösung ist. Die ?:Notation ist der einfachste Code, den wir in dieser Situation finden können.
caiosm1005
1
Zum Beispiel ist es für mich nicht die beste Lösung für den vorliegenden Fall: Ich bin mir nicht sicher, wie der Rückgabewert lautet. es kann boolesch sein oder etwas anderes. (Aufruf einer Funktion, die während des Debuggens von einer anderen Person geschrieben wurde.) Ihre Lösung konvertiert $ res in einen Booleschen Wert, während var_export alle möglichen Typen verarbeiten kann.
13
@ user2443147 Der Typ, der boolesch ist, ist buchstäblich die erste Tatsache, die in der Frage erwähnt wird. Wenn Sie sich nicht sicher sind, mit welchem ​​Typ Sie es zu tun haben, haben Sie zunächst eine ganze Reihe anderer Probleme.
nem75
3
Beachten Sie, dass Sie zusätzliche Klammern benötigen, wenn Sie die Verkettung von ternären Operatoren und Zeichenfolgen mischen. echo '<active>' . $res ? 'true' : 'false' . '</active>';erzeugt nicht das gewünschte Ergebnis, echo '<active>' . ($res ? 'true' : 'false') . '</active>';tut es.
Salman A
194

Die Funktion var_export gibt eine Zeichenfolgendarstellung einer Variablen zurück. Gehen Sie dazu folgendermaßen vor:

var_export($res, true);

Das zweite Argument weist die Funktion an, die Zeichenfolge zurückzugeben, anstatt sie wiederzugeben.

Christian Davén
quelle
Perfekte Antwort. Dies ist die "PHP" -Methode, um eine "... analysierbare Zeichenfolgendarstellung einer Variablen" zu erhalten
peterchaula
61

Ein anderer Weg zu tun: json_encode( booleanValue )

echo json_encode(true);  // string "true"

echo json_encode(false); // string "false"

// null !== false
echo json_encode(null);  // string "null"
Freez
quelle
6
Ich denke, die semantische Verwendung entspricht var_export()eher der Absicht der Operation (es sei denn, man benötigt die Zeichenfolge für einen JSON, das heißt ;-)
Adam Cameron
3
Dies hängt wirklich von dem Nebeneffekt ab, dass die JSON-Darstellung zufällig mit dem übereinstimmt, was gewünscht wird. Es hängt auch davon ab, dass die JSON-Erweiterung installiert und aktiviert ist. Dies ist sehr wahrscheinlich, aber nicht selbstverständlich. Imho, das ist keine saubere Lösung.
Nick Rice
35

Siehe var_export

Dev-Null-Bewohner
quelle
3
Siehe Christians Antwort für weitere Einzelheiten. Fügen Sie insbesondere das zweite Argument (true) ein.
Jimothy
Dies ist eine "Nur-Link" -Antwort, die nicht den SO-Richtlinien für eine "Antwort" entspricht. Bitte editfügen Sie relevante Informationen aus dem Link in Ihren Beitrag ein. Obwohl die Informationen nützlich sind, werden sie dem OP angemessener als "Kommentar" überlassen. Alle notwendigen Informationen aus dem Link müssen in die Antwort eingebettet sein. 1) Wenn der Link nicht mehr erreichbar wäre, würde dieser Beitrag unbrauchbar werden. 2) Besucher sollten nicht aufgefordert werden, externe Links zu besuchen, sondern dies nur selbst herauszufinden. Links zu Dokumentationen, Quellen oder zusätzlichen Informationen werden jedoch dringend empfohlen. Vielen Dank für Ihren Beitrag.
SherylHohman
12

Sie verwenden strval () oder (string), um in PHP in einen String zu konvertieren. Dies konvertiert jedoch keinen Booleschen Wert in die tatsächliche Schreibweise von "wahr" oder "falsch". Sie müssen dies also selbst tun. Hier ist eine Beispielfunktion:

function strbool($value)
{
    return $value ? 'true' : 'false';
}
echo strbool(false); // "false"
echo strbool(true); // "true"
treznik
quelle
Wenn $val = true;dann strval($val)und (string) $valbeide zurückkehren 1.
ABach
9

Die anderen Lösungen hier haben alle Vorbehalte (obwohl sie die vorliegende Frage ansprechen). Wenn Sie (1) eine Schleife über gemischte Typen durchlaufen oder (2) eine generische Lösung wünschen, die Sie als Funktion exportieren oder in Ihre Dienstprogramme aufnehmen können, funktioniert keine der anderen Lösungen hier.

Die einfachste und selbsterklärendste Lösung ist:

// simplest, most-readable
if (is_bool($res) {
    $res = $res ? 'true' : 'false';
}

// same as above but written more tersely
$res = is_bool($res) ? ($res ? 'true' : 'false') : $res;

// Terser still, but completely unnecessary  function call and must be
// commented due to poor readability. What is var_export? What is its
// second arg? Why are we exporting stuff?
$res = is_bool($res) ? var_export($res, 1) : $res;

Die meisten Entwickler, die Ihren Code lesen, benötigen jedoch einen Besuch von http://php.net/var_export, um zu verstehen, var_exportwas der zweite Parameter ist.

1. var_export

Funktioniert für die booleanEingabe, konvertiert aber auch alles andere in a string.

// OK
var_export(false, 1); // 'false'
// OK
var_export(true, 1);  // 'true'
// NOT OK
var_export('', 1);  // '\'\''
// NOT OK
var_export(1, 1);  // '1'

2. ($res) ? 'true' : 'false';

Funktioniert für boolesche Eingaben, konvertiert jedoch alles andere (Ints, Strings) in true / false.

// OK
true ? 'true' : 'false' // 'true'
// OK
false ? 'true' : 'false' // 'false'
// NOT OK
'' ? 'true' : 'false' // 'false'
// NOT OK
0 ? 'true' : 'false' // 'false'

3. json_encode()

Gleiche Probleme wie var_exportund wahrscheinlich schlimmer, da json_encodenicht bekannt ist, ob die Zeichenfolge trueeine Zeichenfolge oder ein Boolescher Wert war.

Aleemb
quelle
var_export()scheint das Beste für den spezifischen Anwendungsfall zu sein, danke.
Dr. Gianluigi Zane Zanettini
Für PHP 5.5+ -Installationen var_export(boolval($var), true)ist dies eine sichere Methode, um den Wert in die Zeichenfolgen "true" oder "false" umzuwandeln.
Ohnmachtssignal
if (is_bool($res) { $res = $res ? 'true' : 'false'; } << das wird nicht funktionieren - fehlt ) vielleicht ist es besser zu verwenden$result = (is_bool($var) && $var) ? 'true' : 'false';
mtizziani
@aleemb Was ist mit: Auf $value = is_bool($value) ? var_export($value, true) : $value;diese Weise lebe ich den Wert intakt und ändere nur den Booleschen Wert in ihre Zeichenfolgendarstellung.
Dickwan
In Ihrer ersten Codezeile haben Sie: $res = $res?? Meinten Sie : $res == $res? Oder sogar : $res === $res?
SherylHohman
2

Warum einfach nicht so?:

if ($res) {
    $converted_res = "true";
}
else {
    $converted_res = "false";
}
guten Abend
quelle
2

Für mich wollte ich eine Zeichenfolgendarstellung, es sei denn, dies war nullder Fall. In diesem Fall wollte ich, dass sie erhalten bleibt null.

Das Problem mit var_export ist, dass es nullin eine Zeichenfolge konvertiert "NULL"und auch eine leere Zeichenfolge in konvertiert "''", was unerwünscht ist. Es gab keine einfache Lösung, die ich finden konnte.

Dies war der Code, den ich endlich verwendet habe:

if (is_bool($val)) $val ? $val = "true" : $val = "false";
else if ($val !== null) $val = (string)$val;

Kurz und einfach und leicht eine Funktion zu werfen, wenn Sie es vorziehen.

dallin
quelle
1

boolval()funktioniert für komplizierte Tabellen, bei denen das Deklarieren von Variablen und das Hinzufügen von Schleifen und Filtern nicht funktioniert. Beispiel:

$result[$row['name'] . "</td><td>" . (boolval($row['special_case']) ? 'True' : 'False') . "</td><td>" . $row['more_fields'] = $tmp

Wo $tmpwird ein Schlüssel verwendet, um andere Daten zu transponieren? Hier wollte ich, dass in der Tabelle "Ja" für 1 und nichts für 0 angezeigt wird (boolval($row['special_case']) ? 'Yes' : '').

Motorbaby
quelle
1
Wann verhält boolval(some_expression) ? .. : ..sich anders als some_expression ? .. : ..?
ToolmakerSteve
1

Dies funktioniert auch für jede Art von Wert:

$a = true;

echo $a                     // outputs:   1
echo value_To_String( $a )  // outputs:   true

Code:

function valueToString( $value ){ 
    return ( !is_bool( $value ) ?  $value : ($value ? 'true' : 'false' )  ); 
}
T.Todua
quelle
1

Bearbeitet basierend auf dem Vorschlag von @ sebastian-norr, der darauf hinweist, dass die $boolVariable ein wahres 0oder ein wahres sein kann oder nicht 1. Zum Beispiel 2beschließt, truewenn es durch einen Booleschen Test in PHP läuft.

Als Lösung habe ich Typguss verwendet, um sicherzustellen, dass wir $boolzu 0oder konvertieren 1.
Aber ich muss zugeben, dass der einfache Ausdruck $bool ? 'true' : 'false'viel sauberer ist.

Meine unten verwendete Lösung sollte niemals verwendet werden, LOL.
Hier ist warum nicht ...

Um Wiederholungen zu vermeiden, kann das Array, das die Zeichenfolgendarstellung des Booleschen Werts enthält, in einer Konstante gespeichert werden, die in der gesamten Anwendung verfügbar gemacht werden kann.

// Make this constant available everywhere in the application
const BOOLEANS = ['true', 'false'];

$bool = true;
echo BOOLEANS[(bool)  $bool]; // 'true'
echo BOOLEANS[(bool) !$bool]; // 'false'
Asiby
quelle
0

Ich bin kein Fan der akzeptierten Antwort, da sie alles, was als falsch bewertet wird, in "false"nicht nur boolesch und umgekehrt umwandelt .

Wie auch immer, hier ist meine OTT-Antwort, sie verwendet die var_exportFunktion.

var_exportfunktioniert mit allen Variablentypen, außer dass resourceich eine Funktion erstellt habe , die abhängig von den angegebenen Argumenten eine reguläre Umwandlung in string ( (string)), eine strikte Umwandlung ( var_export) und eine Typprüfung durchführt.

if(!function_exists('to_string')){

    function to_string($var, $strict = false, $expectedtype = null){

        if(!func_num_args()){
            return trigger_error(__FUNCTION__ . '() expects at least 1 parameter, 0 given', E_USER_WARNING);
        }
        if($expectedtype !== null  && gettype($var) !== $expectedtype){
            return trigger_error(__FUNCTION__ . '() expects parameter 1 to be ' . $expectedtype .', ' . gettype($var) . ' given', E_USER_WARNING);
        }
        if(is_string($var)){
            return $var;
        }
        if($strict && !is_resource($var)){
            return var_export($var, true);
        }
        return (string) $var;
    }
}

if(!function_exists('bool_to_string')){

    function bool_to_string($var){
        return func_num_args() ? to_string($var, true, 'boolean') : to_string();        
    }
}

if(!function_exists('object_to_string')){

    function object_to_string($var){
        return func_num_args() ? to_string($var, true, 'object') : to_string();        
    }
}

if(!function_exists('array_to_string')){

    function array_to_string($var){
        return func_num_args() ? to_string($var, true, 'array') : to_string();        
    }
}
TarranJones
quelle
0
$converted_res = isset ( $res ) ? ( $res ? 'true' : 'false' ) : 'false';
MERT DOĞAN
quelle
issethier nicht notwendig. In PHP ifist -test falsch für beide nullund variable not defined. Kann einfach so machen $converted_res = ( $res ? 'true' : 'false' );wie in älteren Antworten.
ToolmakerSteve
0
function ToStr($Val=null,$T=0){

    return is_string($Val)?"$Val"
    :
    (
        is_numeric($Val)?($T?"$Val":$Val)
        :
        (
            is_null($Val)?"NULL"
            :
            (
                is_bool($Val)?($Val?"TRUE":"FALSE")
                :
                (
                    is_array($Val)?@StrArr($Val,$T)
                    :
                    false
                )
            )
        )
    );

}
function StrArr($Arr,$T=0)
{
    $Str="";
    $i=-1;
    if(is_array($Arr))
    foreach($Arr AS $K => $V)
    $Str.=((++$i)?", ":null).(is_string($K)?"\"$K\"":$K)." => ".(is_string($V)?"\"$V\"":@ToStr($V,$T+1));
    return "array( ".($i?@ToStr($Arr):$Str)." )".($T?null:";");
}

$A = array(1,2,array('a'=>'b'),array('a','b','c'),true,false,ToStr(100));
echo StrArr($A); // OR ToStr($A) // OR ToStr(true) // OR StrArr(true)
AbdulRahman AlShamiri
quelle
-2

Ich wollte nur aktualisieren, in PHP> = 5.50 können boolval()Sie das Gleiche tun

Referenz hier .

Jesse
quelle
3
Dies entspricht der Verwendung von(bool) $var;
Al.G.
Danke dir! Das hat bei mir in einem komplizierten Tisch funktioniert. Benutzte es so:"<td>" . (boolval($row['special_case']) ? 'Yes' : ' ') . "</td>"
Motorbaby
4
boolval()geht in die andere Richtung und konvertiert eine Variable eines beliebigen Typs in bool, nicht bool in string.
Mike Chamberlain