Другие решения здесь имеют свои предостережения (хотя они решают вопрос под рукой). Если вы (1) выполняете циклы по смешанным типам или (2) хотите общее решение, которое вы можете экспортировать как функцию или включить в свои утилиты, ни одно из других решений здесь не будет работать.
Самое простое и понятное решение:
// 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;
Но большинству разработчиков, читающих ваш код, потребуется посещение http://php.net/var_export, чтобы понять, что var_export
делает и что такое второй параметр.
1. var_export
Работает для boolean
ввода, но также преобразует все остальное 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';
Работает для логического ввода, но преобразует все остальное (целые, строки) в 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()
Те же проблемы, что var_export
и, вероятно, еще хуже, поскольку json_encode
не могут знать, была ли строка true
предназначена для строки или логического значения.