题 如何将布尔值转换为字符串


我有一个布尔变量,我想将其转换为字符串

$res = true;

我需要它转换后的值也是格式 "true" "false" 不 "0" "1"

$converted_res = "true";
$converted_res = "false";

我试过了:

$converted_res = string($res);
$converted_res = String($res);

但它告诉我 string 和 String 不是公认的功能。如何在php中将此布尔值转换为格式为“true”或“false”的字符串?


164
2018-05-08 18:28


起源


较新的使用函数((string)$ param [boolean type]){if($ param){....}}因为(string)false =>“false”不是false ... - zloctb


答案:


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

264
2018-05-08 18:29



这是最简单的方法,但它取决于你需要它,因为它可能不是最好的方法。 - Androme
@DoomStone我知道它已经3年了,但我只是想知道是什么让你觉得在某些情况下它不是最好的解决方案。该 ?: 符号是我们在这种情况下可以提出的最简化的代码。 - caiosm1005
例如对我而言,它不是手头案例的最佳解决方案:我不确定返回值的类型是什么;它可能是布尔或其他东西。 (调用其他人在调试期间编写的函数。)您的解决方案将$ res转换为boolean,而var_export可以处理所有可能的类型。
@ user2443147类型为boolean实际上是问题中提到的第一个事实。如果您不确定要处理的类型,那么您可能会遇到另外一组问题。 - nem75
请注意,混合使用三元运算符和字符串连接时需要额外的括号。 echo '<active>' . $res ? 'true' : 'false' . '</active>'; 没有产生预期的结果, echo '<active>' . ($res ? 'true' : 'false') . '</active>'; 确实。 - Salman A


功能 var_export 返回变量的字符串表示形式,因此您可以这样做:

var_export($res, true);

第二个参数告诉函数返回字符串而不是回显它。


136
2018-01-04 14:51



这应该是公认的答案 - Robert Sinclair


另一种方法: json_encode( booleanValue ) 

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

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

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

41
2018-01-19 16:57



我认为 语义 运用 var_export() 更符合操作的意图(除非需要一些JSON的字符串,即:-) - Adam Cameron
这实际上依赖于JSON表示恰好与所需内容相同的副作用。它还依赖于安装和启用的JSON扩展,这可能很有可能但不是给定的。所以imho这不是一个干净的解决方案。 - Nick Rice


看到 var_export


35
2018-05-08 18:39



看到 克里斯蒂安的回答 了解更多细节。具体来说,包括第二个参数(true)。 - Jimothy


您可以使用strval()或(string)在PHP中转换为字符串。 但是,这不会将布尔值转换为“true”或“false”的实际拼写,因此您必须自己执行此操作。 这是一个示例函数:

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

11
2018-05-08 18:30



如果 $val = true; 然后 strval($val) 和 (string) $val 都返回1。 - ABach


这里的其他解决方案都有警告(尽管它们解决了手头的问题)。如果您(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 是一个字符串或布尔值。


6
2018-04-16 11:43



var_export() 对于特定用例来说似乎是最好的,谢谢。 - Dr. Gianluigi Zane Zanettini
对于PHP 5.5+安装, var_export(boolval($var), true) 是一种将值转换为字符串“true”或“false”的安全方式。 - faintsignal
if (is_bool($res) { $res = $res ? 'true' : 'false'; }  “这不会奏效 - 失踪 )  也许它更好用 $result = (is_bool($var) && $var) ? 'true' : 'false'; - mtizziani
@aleemb怎么样: $value = is_bool($value) ? var_export($value, true) : $value; 这样我将值保持不变,只将布尔值更改为其字符串表示形式。 - dickwan


使用 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

3
2018-05-07 12:51



这不是相反吗? - TarranJones


为什么不这样做?:

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

2
2018-05-08 22:25





我不是所接受答案的粉丝,因为它会将评估为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();        
    }
}

0
2018-05-20 11:51