J'ai une variable booléenne que je veux convertir en chaîne
$res = true;
J'en ai besoin que la valeur convertie soit également au format "true" "false"
pas "0" "1"
$converted_res = "true";
$converted_res = "false";
J'ai essayé:
$converted_res = string($res);
$converted_res = String($res);
mais cela me dit que string
et String
ne sont pas des fonctions reconnues. Comment convertir ce booléen en chaîne au format "vrai" ou "faux" en php?
$converted_res = ($res) ? 'true' : 'false';
La fonction var_export retourne une représentation sous forme de chaîne d'une variable, vous pouvez donc faire ceci:
var_export($res, true);
Le deuxième argument indique à la fonction de renvoyer la chaîne au lieu de la renvoyer en écho.
Une autre façon de faire: json_encode( booleanValue )
echo json_encode(true); // string "true"
echo json_encode(false); // string "false"
// null !== false
echo json_encode(null); // string "null"
Voir var_export
Vous utilisez strval () ou (string) pour convertir chaîne en PHP . Cependant, cela ne convertit pas booléen en orthographe réelle de "true" ou "false", vous devez donc le faire vous-même . un exemple de fonction:
function strbool($value)
{
return $value ? 'true' : 'false';
}
echo strbool(false); // "false"
echo strbool(true); // "true"
Les autres solutions présentées ici comportent toutes des réserves (bien qu’elles répondent à la question à l’étude). Si vous (1) passez en boucle sur des types mixtes ou (2) souhaitez une solution générique que vous pouvez exporter en tant que fonction ou inclure dans vos utilitaires, aucune des autres solutions ne fonctionnera.
La solution la plus simple et la plus explicite est:
// 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;
Mais la plupart des développeurs qui lisent votre code vont devoir se rendre à http://php.net/var_export pour comprendre ce que fait le var_export
et quel est le deuxième paramètre.
var_export
Fonctionne pour une entrée boolean
mais convertit tout le reste en 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';
Fonctionne pour une entrée booléenne mais convertit tout le reste (ints, chaînes) en 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()
Mêmes problèmes que var_export
et probablement pire puisque json_encode
ne peut pas savoir si la chaîne true
était destinée à être une chaîne ou un booléen.
UTILISER 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()
fonctionne pour les tables complexes où la déclaration de variables et l'ajout de boucles et de filtres ne fonctionnent pas. Exemple:
$result[$row['name'] . "</td><td>" . (boolval($row['special_case']) ? 'True' : 'False') . "</td><td>" . $row['more_fields'] = $tmp
où $tmp
est une clé utilisée pour transposer d'autres données. Ici, je voulais que la table affiche "Oui" pour 1 et rien pour 0, donc utilisé (boolval($row['special_case']) ? 'Yes' : '')
.
Pourquoi ne fais-tu pas comme ça ?:
if ($res) {
$converted_res = "true";
}
else {
$converted_res = "false";
}
- Edité sur la base de la suggestion de @ sebastian-norr indiquant que la variable $bool
peut ou non être un vrai 0
ou 1
. Par exemple, 2
est résolu en true
lors de l’exécution d’un test booléen en PHP.
En guise de solution, j’ai utilisé un type de transtypage pour nous assurer que nous convertissions $bool
en 0
ou 1
. Mais je dois admettre que la simple expression $bool ? 'true' : 'false'
est beaucoup plus propre. Ma solution utilisée ci-dessous ne doit jamais être utilisée LOL.
Pourquoi pas ...
$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)?@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)
$converted_res = isset ( $res ) ? ( $res ? 'true' : 'false' ) : 'false';
Cela fonctionne aussi pour tout type de valeur:
$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' ) );
}
Je ne suis pas un fan de la réponse acceptée, car elle convertit tout ce qui est faux en "false"
no boolean et vice-versa.
Quoi qu'il en soit, voici ma réponse O.T.T, elle utilise la fonction var_export
.
var_export
fonctionne avec tous les types de variable sauf resource
, j'ai créé une fonction qui effectuera une conversion normale en chaîne ((string)
), une distribution stricte (var_export
) et une vérification de type, en fonction des arguments fournis.
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();
}
}