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?
$converted_res = ($res) ? 'true' : 'false';
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.
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"
Siehe var_export
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"
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.
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'
($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'
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.
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
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' : '')
.
Warum machst du das nicht einfach so ?:
if ($res) {
$converted_res = "true";
}
else {
$converted_res = "false";
}
- 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'
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';
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' ) );
}
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();
}
}