Как преобразовать логическое значение в строку

У меня есть логическая переменная, которую я хочу преобразовать в строку

$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?

Ответ 1

Самое простое решение:

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

Ответ 2

Функция var_export возвращает строковое представление переменной, поэтому вы можете сделать это:

var_export($res, true);

Второй аргумент говорит функции возвращать строку вместо эхо-сигнала.

Ответ 3

Другой способ: json_encode( booleanValue )

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

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

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

Ответ 5

Вы используете strval() или (string) для преобразования в строку в PHP. Однако это не преобразует логическое значение в фактическое написание "истинного" или "ложного", поэтому вы должны сделать это самостоятельно. Вот пример функции:

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

Ответ 6

Другие решения здесь все имеют оговорки (хотя они решают вопрос под рукой). Если вы (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';

Работает для логического ввода, но преобразует все остальное (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'

3. json_encode()

Те же проблемы, что и var_export и, вероятно, хуже, поскольку json_encode не может знать, была ли строка true предназначена для строки или логического значения.

Ответ 7

ИСПОЛЬЗОВАТЬ 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

Ответ 8

Почему просто не делайте этого?:

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

Ответ 9

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' : '').

Ответ 10

- Отредактировано на основе предложения @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'

Ответ 11

Я не являюсь поклонником принятого ответа, поскольку он преобразует все, что оценивает значение 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();        
    }
}

Ответ 12

$converted_res = isset ( $res ) ? ( $res ? 'true' : 'false' ) : 'false';

Ответ 13

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)

Ответ 14

Это работает также для любого вида стоимости:

$a = true;

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

код:

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

Ответ 15

Просто хочу обновить, PHP >= 5.50, вы можете сделать boolval(), чтобы сделать то же самое

Ссылка здесь.