У меня есть логическая переменная, которую я хочу преобразовать в строку
$res = true;
Мне нужно, чтобы преобразованное значение также находилось в формате "true" "false"
не "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);
Второй аргумент говорит функции возвращать строку вместо эхо-сигнала.
См. Var_export
Другой способ: json_encode( booleanValue )
echo json_encode(true); // string "true" echo json_encode(false); // string "false" // null !== false echo json_encode(null); // string "null"
Вы используете 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';
($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
заданной строкой или логической.
USE 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"; }
Я не поклонник принятого ответа, поскольку он преобразует все, что оценивает значение false, чтобы "false"
не просто логическое и наоборот.
В любом случае, вот мой ответ OTT, он использует функцию var_export
.
var_export
работает со всеми типами переменных, кроме resource
, я создал функцию, которая будет выполнять регулярное преобразование в строку ( (string)
), строгий var_export
( 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';
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' : '')
.
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)
Просто хочу обновить, в PHP> = 5.50 вы можете сделать boolval()
чтобы сделать то же самое
Ссылка здесь .