wake-up-neo.com

So konvertieren Sie Boolean in String

Ich habe eine boolesche Variable, die ich in eine Zeichenfolge konvertieren möchte

$res = true;

Ich brauche den konvertierten Wert, um auch im Format "true" "false" und nicht "0" "1" zu sein.

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

Ich habe es versucht:

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

aber es sagt mir, dass string und String keine erkannten Funktionen sind. Wie konvertiere ich diesen booleschen Wert in einen String im Format "true" oder "false" in php?

182
tag
$converted_res = ($res) ? 'true' : 'false';
295
hobodave

Die Funktion var_export gibt eine Zeichenfolgendarstellung einer Variablen zurück. Sie können also Folgendes tun:

var_export($res, true);

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

157

Eine andere Möglichkeit: json_encode( booleanValue ) 

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

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

// null !== false
echo json_encode(null);  // string "null"
46
Freez
35

Sie verwenden strval () oder (string), um in PHP ..__ in String umzuwandeln. Dies konvertiert jedoch nicht boolean in die eigentliche Schreibweise von "true" oder "false". Sie müssen dies also selbst tun eine Beispielfunktion:

function strbool($value)
{
    return $value ? 'true' : 'false';
}
echo strbool(false); // "false"
echo strbool(true); // "true"
11
treznik

Die anderen Lösungen hier haben alle Vorbehalte (obwohl sie die anstehende Frage beantworten). Wenn Sie (1) 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 eine Reise nach http://php.net/var_export , um zu verstehen, was der var_export macht und was der zweite Parameter ist.

1. var_export

Funktioniert für boolean-Eingabe, konvertiert jedoch auch alles andere in eine 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 Eingabe, 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()

Die gleichen Probleme wie var_export und wahrscheinlich schlechter, da json_encode nicht wissen kann, ob die Zeichenfolge true für eine Zeichenfolge oder einen Booleschen Wert gedacht war.

8
aleemb

USE filter_var()

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('ANYthingELSE', FILTER_VALIDATE_BOOLEAN); // false
filter_var('', FILTER_VALIDATE_BOOLEAN); // false
filter_var(null, FILTER_VALIDATE_BOOLEAN); // false
2

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

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

dabei ist $tmp ein Schlüssel, der zum Transponieren anderer Daten verwendet wird. Hier wollte ich, dass die Tabelle "Ja" für 1 und nichts für 0 anzeigt, also (boolval($row['special_case']) ? 'Yes' : '').

1
motorbaby

Warum machst du das nicht einfach so ?:

if ($res) {
    $converted_res = "true";
}
else {
    $converted_res = "false";
}
1
good_evening

- Auf der Grundlage des @ sebastian-norr-Vorschlags bearbeitet, der darauf hinweist, dass die $bool-Variable ein wahrer 0 oder 1 sein kann oder nicht. Beispiel: 2 wird in true aufgelöst, wenn ein boolescher Test in PHP ausgeführt wird.

Als Lösung habe ich ein Typ-Casting verwendet, um sicherzustellen, dass wir $bool in 0 oder 1 konvertieren. Aber ich muss zugeben, dass der einfache Ausdruck $bool ? 'true' : 'false' viel sauberer ist. Meine unten verwendete Lösung sollte niemals LOL verwendet werden.

Warum nicht ...

$bool = true;
echo ['false', 'true'][(bool) $bool]; // 'true'
echo ['false', 'true'][(bool) !$bool]; // 'false'
1
asiby
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)[email protected]($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( ".([email protected]($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)
$converted_res = isset ( $res ) ? ( $res ? 'true' : 'false' ) : 'false';
0
MERT DOĞAN

Dies funktioniert auch für jeden 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' )  ); 
}
0
T.Todua

Ich bin kein Fan der akzeptierten Antwort, da sie alles konvertiert, was als falsch in "false" ausgewertet wird, und nicht nur boolean und umgekehrt. 

Wie auch immer, hier ist meine Antwort von O.T.T, sie verwendet die Funktion var_export .

var_export funktioniert mit allen Variablentypen außer resource. Ich habe eine Funktion erstellt, die eine reguläre Umwandlung in Zeichenfolge ((string)), eine strikte Umwandlung (var_export) und eine Typüberprüfung ausführt, abhängig von den bereitgestellten Argumenten. 

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();        
    }
}
0
TarranJones