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_export
fa e qual è il secondo parametro.
1. var_export
Funziona per l' boolean
input 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_export
e, probabilmente, peggio, poiché json_encode
non è possibile sapere se la stringa true
fosse una stringa o un valore booleano.