Ответ 1
Самое простое решение:
$converted_res = $res ? 'true' : 'false';
У меня есть логическая переменная, которую я хочу преобразовать в строку
$res = true;
Мне нужно, чтобы преобразованное значение также было в формате "true" "false"
not "0" "1"
$converted_res = "true";
$converted_res = "false";
Я пробовал:
$converted_res = string($res);
$converted_res = String($res);
но он говорит мне, что string
и string
не распознаются. Как преобразовать это логическое значение в строку в формате "true" или "false" в php?
Самое простое решение:
$converted_res = $res ? 'true' : 'false';
Функция var_export возвращает строковое представление переменной, поэтому вы можете сделать это:
var_export($res, true);
Второй аргумент говорит функции возвращать строку вместо эхо-сигнала.
Другой способ: json_encode( booleanValue )
echo json_encode(true); // string "true"
echo json_encode(false); // string "false"
// null !== false
echo json_encode(null); // string "null"
См. var_export
Вы используете strval() или (string) для преобразования в строку в PHP. Однако это не преобразует логическое значение в фактическое написание "истинного" или "ложного", поэтому вы должны сделать это самостоятельно. Вот пример функции:
function strbool($value)
{
return $value ? 'true' : 'false';
}
echo strbool(false); // "false"
echo strbool(true); // "true"
Другие решения здесь все имеют оговорки (хотя они решают вопрос под рукой). Если вы (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
и что второй параметр.
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'
($res) ? 'true' : 'false';
Работает для логического ввода, но преобразует все остальное (ints, string) в 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()
Те же проблемы, что и var_export
и, вероятно, хуже, поскольку json_encode
не может знать, была ли строка true
предназначена для строки или логического значения.
ИСПОЛЬЗОВАТЬ 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
Почему просто не делайте этого?:
if ($res) {
$converted_res = "true";
}
else {
$converted_res = "false";
}
boolval()
работает для сложных таблиц, где объявление переменных и добавление циклов и фильтров не работает. Пример:
$result[$row['name'] . "</td><td>" . (boolval($row['special_case']) ? 'True' : 'False') . "</td><td>" . $row['more_fields'] = $tmp
где $tmp
- это ключ, используемый для переноса других данных. Здесь я хотел, чтобы таблица отображала "Да" для 1 и ничего для 0, поэтому используется (boolval($row['special_case']) ? 'Yes' : '')
.
- Отредактировано на основе предложения @sebastian-norr, указывающего, что переменная $bool
может быть или не быть истинной 0
или 1
. Например, 2
преобразуется в true
при запуске его через логический тест в PHP.
В качестве решения я использовал приведение типов, чтобы обеспечить преобразование $bool
в 0
или 1
. Но я должен признать, что простое выражение $bool ? 'true' : 'false'
намного чище. Мое решение, использованное ниже, никогда не должно использоваться LOL.
Почему бы и нет...
$bool = true;
echo ['false', 'true'][(bool) $bool]; // 'true'
echo ['false', 'true'][(bool) !$bool]; // 'false'
Я не являюсь поклонником принятого ответа, поскольку он преобразует все, что оценивает значение false, в "false"
не просто логическое и наоборот.
В любом случае, здесь мой ответ O.T.T, он использует функцию var_export
.
var_export
работает со всеми типами переменных, кроме resource
, я создал функцию, которая будет выполнять регулярное преобразование в строку ((string)
), строгий листинг (var_export
) и проверку типа, в зависимости от аргументы предоставлены.
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();
}
}
$converted_res = isset ( $res ) ? ( $res ? 'true' : 'false' ) : '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)
Это работает также для любого вида стоимости:
$a = true;
echo $a // outputs: 1
echo value_To_String( $a ) // outputs: true
код:
function valueToString( $value ){
return ( !is_bool( $value ) ? $value : ($value ? 'true' : 'false' ) );
}
Просто хочу обновить, PHP >= 5.50, вы можете сделать boolval()
, чтобы сделать то же самое