Come convertire booleani in stringa


243

Ho una variabile booleana che voglio convertire in una stringa:

$res = true;

Ho bisogno che il valore convertito sia del formato: "true" "false"no"0" "1"

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

Ho provato:

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

Ma me lo dice stringe Stringnon sono funzioni riconosciute.
Come posso convertire questo booleano in una stringa nel formato "true"o "false"in PHP?


1
Funzione di utilizzo più recente ((stringa) $ param [tipo booleano]) {if ($ param) {....}} perché (stringa) false => "false" non è falso ...
zloctb

Risposte:


361

La soluzione più semplice:

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


1
Questo è il modo più semplice per farlo, ma dipende da ciò di cui hai bisogno perché potrebbe non essere la soluzione migliore.
Androme,

1
@DoomStone So che sono passati 3 anni, ma volevo solo sapere cosa ti fa pensare in alcuni casi non è la soluzione migliore. La ?:notazione è il codice più semplificato che possiamo trovare in questa situazione.
caiosm1005,

1
Ad esempio per me, non è la soluzione migliore per il caso in esame: non sono sicuro di quale sia il tipo di valore restituito; può essere booleano o qualcos'altro. (Chiamando una funzione che qualcun altro ha scritto durante il debug.) La tua soluzione converte $ res in booleano, mentre var_export può gestire tutti i tipi possibili.

13
@ user2443147 il tipo booleano è letteralmente il primo fatto menzionato nella domanda. Se non sei sicuro del tipo con cui hai a che fare, devi iniziare con tutta un'altra serie di problemi.
nem75,

3
Nota che hai bisogno di parentesi extra quando mescoli l'operatore ternario e la concatenazione di stringhe. echo '<active>' . $res ? 'true' : 'false' . '</active>';non produce il risultato desiderato, lo echo '<active>' . ($res ? 'true' : 'false') . '</active>';fa.
Salman A

195

La funzione var_export restituisce una rappresentazione in forma di stringa di una variabile, quindi è possibile farlo:

var_export($res, true);

Il secondo argomento dice alla funzione di restituire la stringa invece di farla eco.


Risposta perfetta Questo è il modo "PHP" di ottenere un "... una rappresentazione di stringa analizzabile di una variabile"
peterchaula

62

Un altro modo di fare: json_encode( booleanValue )

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

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

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

6
Penso che usare semanticamentevar_export() sia più in linea con l'intento dell'operazione (a meno che uno non abbia bisogno della stringa per alcuni JSON, cioè ;-)
Adam Cameron

3
Questo si basa davvero sull'effetto collaterale che la rappresentazione JSON sembra essere la stessa di ciò che si desidera. Si basa inoltre sull'installazione e l'abilitazione dell'estensione JSON, il che potrebbe essere molto probabile ma non scontato. Quindi, non è una soluzione pulita.
Nick Rice,

35

Vedi var_export


3
Vedi la risposta di Christian per maggiori dettagli. In particolare, includere il secondo argomento (vero).
Jimothy,

Questa è una risposta "solo link", che non rispetta le linee guida SO per una "risposta". Si prega editdi includere informazioni pertinenti dal link nel tuo post. Sebbene le informazioni siano utili, vengono più opportunamente lasciate come "commenti" all'OP. Tutte le informazioni necessarie dal collegamento devono essere integrate nella risposta. 1) Se il link dovesse diventare irraggiungibile, questo post diventerebbe inutile. 2) i visitatori non dovrebbero essere tenuti a visitare link esterni, ma solo a capirsi da soli. Detto questo, i collegamenti a documentazione, fonti o informazioni aggiuntive sono fortemente incoraggiati. Grazie per il tuo contributo
SherylHohman

12

Usa strval () o (stringa) per convertire in stringa in PHP. Tuttavia, ciò non converte il booleano nell'ortografia reale di "vero" o "falso", quindi è necessario farlo da soli. Ecco una funzione di esempio:

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

Se $val = true;poi strval($val)ed (string) $valentrambi ritornano 1.
ABach

9

Le altre soluzioni qui hanno tutte le avvertenze (sebbene rispondano alla domanda a portata di mano). Se stai (1) esegui il ciclo su tipi misti o (2) desideri una soluzione generica che puoi esportare come funzione o includere nelle tue utility, nessuna delle altre soluzioni qui funzionerà.

La soluzione più semplice e più autoesplicativa è:

// 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;

Ma la maggior parte degli sviluppatori che leggono il tuo codice richiederà un viaggio su http://php.net/var_export per capire cosa var_exportfa e qual è il secondo parametro.

1. var_export

Funziona per l' booleaninput ma converte anche tutto il resto in un 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';

Funziona con input booleani ma converte tutto il resto (ints, stringhe) 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()

Stessi problemi var_exporte, probabilmente, peggio, poiché json_encodenon è possibile sapere se la stringa truefosse una stringa o un valore booleano.


var_export()sembra essere il migliore per il caso d'uso specifico, grazie.
Dr. Gianluigi Zane Zanettini,

Per le installazioni di PHP 5.5+, var_export(boolval($var), true)è un percorso sicuro per trasformare il valore nelle stringhe "true" o "false".
faintsignal

if (is_bool($res) { $res = $res ? 'true' : 'false'; } << questo non funzionerà - manca ) forse è meglio usarlo$result = (is_bool($var) && $var) ? 'true' : 'false';
mtizziani

@aleemb Che dire: in $value = is_bool($value) ? var_export($value, true) : $value;questo modo vivo il valore intatto e cambio solo il booleano nella loro rappresentazione di stringa.
Dickwan,

Nella tua prima riga di codice hai: $res = $res?? Forse cercavi: $res == $res? O anche $res === $res:?
SherylHohman

2

Perché semplicemente non fare così ?:

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

2

Per me, volevo una rappresentazione di stringa a meno che non lo fosse null, nel qual caso volevo che rimanesse null.

Il problema con var_export è che converte nullin una stringa "NULL"e converte anche una stringa vuota in "''", il che è indesiderabile. Non c'era una soluzione facile che potessi trovare.

Questo era il codice che ho finalmente usato:

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

Se preferisci, anche breve, semplice e facile da inserire in una funzione.


1

boolval()funziona per tabelle complicate in cui la dichiarazione di variabili e l'aggiunta di loop e filtri non funzionano. Esempio:

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

dove $tmpè una chiave utilizzata per trasporre altri dati. Qui, volevo che la tabella mostrasse "Sì" per 1 e niente per 0, così usato (boolval($row['special_case']) ? 'Yes' : '').


1
Quando si boolval(some_expression) ? .. : ..comporta diversamente da some_expression ? .. : ..?
ToolmakerSteve

1

Questo funziona anche per qualsiasi tipo di valore:

$a = true;

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

codice:

function valueToString( $value ){ 
    return ( !is_bool( $value ) ?  $value : ($value ? 'true' : 'false' )  ); 
}

1

Modificato in base al suggerimento di @ sebastian-norr sottolineando che la $boolvariabile può essere o non essere vera 0o 1. Ad esempio, si 2risolve truedurante l'esecuzione di un test booleano in PHP.

Come soluzione, ho usato il cast di tipo per assicurarmi di convertirci $boolin 0o 1.
Ma devo ammettere che l'espressione semplice $bool ? 'true' : 'false'è molto più pulita.

La mia soluzione usata di seguito non dovrebbe mai essere usata, LOL.
Ecco perché no ...

Per evitare ripetizioni, l'array contenente la rappresentazione in formato stringa del valore booleano può essere archiviato in una costante che può essere resa disponibile in tutta l'applicazione.

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

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

0

Non sono un fan della risposta accettata in quanto converte tutto ciò che valuta falso in "false"non solo booleano e viceversa.

Comunque ecco la mia risposta OTT, usa la var_exportfunzione.

var_exportfunziona con tutti i tipi di variabili tranne resource, ho creato una funzione che eseguirà un cast regolare su string ( (string)), un cast rigoroso ( var_export) e un controllo del tipo, a seconda degli argomenti forniti.

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
$converted_res = isset ( $res ) ? ( $res ? 'true' : 'false' ) : 'false';

issetnon necessario qui. In php, if-test è falso per entrambi nulle variable not defined. Può semplicemente fare $converted_res = ( $res ? 'true' : 'false' );come si vede nelle risposte più vecchie.
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)

-2

Volevo solo aggiornare, in PHP> = 5.50 puoi fare boolval()per fare la stessa cosa

Riferimento qui .


3
È lo stesso che usare(bool) $var;
Al.G.

Grazie! Questo ha funzionato per me in un tavolo complicato. Usata così:"<td>" . (boolval($row['special_case']) ? 'Yes' : ' ') . "</td>"
motorbaby

4
boolval()va dall'altra parte, convertendo una variabile di qualsiasi tipo in bool, non bool in string.
Mike Chamberlain,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.