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


242

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

$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"PHP 格式的字符串?


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

Answers:


361

最简单的解决方案:

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


1
这是最简单的方法,但这取决于您的需求,因为它可能不是最佳解决方案。
仙女座

1
@DoomStone我知道已经过去三年了,但我只是想知道是什么让您认为在某些情况下这不是最佳解决方案。?:在这种情况下,符号是我们可以想到的最简化的代码。
caiosm1005

1
例如,对于我来说,这并不是当前情况的最佳解决方案:我不确定返回值的类型是什么;它可能是布尔值或其他。(在调试过程中调用其他人编写的函数。)您的解决方案将$ res转换为布尔值,而var_export可以处理所有可能的类型。

13
@ user2443147布尔类型实际上是问题中提到的第一个事实。如果您不确定要处理的类型,则可能会遇到其他一系列问题。
nem75

3
请注意,混合使用三元运算符和字符串连接时,需要使用额外的括号。echo '<active>' . $res ? 'true' : 'false' . '</active>';不会产生预期的结果,但是echo '<active>' . ($res ? 'true' : 'false') . '</active>';会产生。
Salman A

194

函数var_export返回变量的字符串表示形式,因此您可以执行以下操作:

var_export($res, true);

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


完美的答案。这是获取“ ...变量的可解析字符串表示形式”的“ PHP”方式
peterchaula

61

另一种方法是: json_encode( booleanValue )

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

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

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

6
我认为在语义上使用var_export()该操作更符合意图(除非有人需要用于某些JSON的字符串,即;-)
Adam Cameron

3
这确实取决于JSON表示恰好与所需的相同的副作用。它还依赖于已安装和启用的JSON扩展,这很可能会出现,但不是给定的。所以恕我直言,这不是一个干净的解决方案。
尼克·赖斯

35

参见var_export


3
有关更多详细信息,请参见Christian的答案。具体来说,包括第二个参数(true)。
Jimothy

这是一个“仅链接”答案,不符合“答案”的SO准则。请edit通过链接将相关信息添加到您的帖子中。尽管该信息很有用,但更适合作为OP的“注释”。链接中的所有必要信息都必须嵌入答案中。1)如果链接变得不可访问,则此帖子将变得无用。2)不应要求访问者仅凭自己来了解外部链接。也就是说,强烈建议您链接到文档,资源或其他信息。感谢您的贡献。
SherylHohman

12

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

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

如果$val = true;strval($val)(string) $val都返回1
ABach

9

这里的其他解决方案都有警告(尽管它们解决了眼前的问题)。如果您(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也会将其他所有内容都转换为a 。

// 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';

适用于布尔输入,但会将其他所有内容(int,字符串)转换为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是预期的字符串还是布尔值。


var_export()似乎是针对特定用例的最佳选择,谢谢。
Gianluigi Zane Zanettini博士2015年

对于PHP 5.5+安装,这var_export(boolval($var), true)是将值转换为字符串“ true”或“ false”的安全方法。
faintsignal '16

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

在第一行代码中,您具有:$res = $res?? 你的意思是:$res == $res?甚至:$res === $res
SherylHohman

2

为什么不这样做呢?:

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

2

对我来说,我想要一个字符串表示形式,除非是这样null,在这种情况下,我希望它保持不变null

var_export的问题在于它将转换null为字符串"NULL",还将空字符串转换为"''",这是不可取的。我找不到简单的解决方案。

这是我最终使用的代码:

if (is_bool($val)) $val ? $val = "true" : $val = "false";
else if ($val !== null) $val = (string)$val;

如果您愿意,也可以简短,简单,容易地添加函数。


1

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


1
什么时候boolval(some_expression) ? .. : ..表现与众不同some_expression ? .. : ..
制造商史蒂夫

1

这也适用于任何一种价值:

$a = true;

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

码:

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

1

根据@ sebastian-norr建议进行编辑,指出该$bool变量可能为true 0或不是true 1。例如,在PHP中通过布尔测试运行时2解析为true

作为解决方案,我使用类型转换来确保我们转换$bool01
但是我必须承认,简单的表达$bool ? 'true' : 'false'方式更简洁。

我永远不会使用我在下面使用的解决方案,哈哈。
这就是为什么不...

为了避免重复,可以将包含布尔值的字符串表示形式的数组存储在一个常量中,该常量可以在整个应用程序中使用。

// Make this constant available everywhere in the application
const BOOLEANS = ['true', 'false'];

$bool = true;
echo BOOLEANS[(bool)  $bool]; // 'true'
echo BOOLEANS[(bool) !$bool]; // 'false'

0

我不喜欢已接受的答案,因为它会将评估为false的所有内容转换为"false"布尔值,反之亦然。

无论如何,这是我的OTT答案,它使用了该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
$converted_res = isset ( $res ) ? ( $res ? 'true' : 'false' ) : 'false';

isset这里没有必要。在php中,if-test对null和均为false variable not defined。可以$converted_res = ( $res ? 'true' : 'false' );按照较早的答案进行操作。
ToolmakerSteve

0
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)

-2

只是想更新,在PHP> = 5.50中,您可以做boolval()同样的事情

参考这里


3
这与使用(bool) $var;
Al.G.

谢谢!这对我来说很复杂。像这样使用它:"<td>" . (boolval($row['special_case']) ? 'Yes' : ' ') . "</td>"
motorbaby

4
boolval()相反,将任何类型的变量转换为bool,而不是bool转换为字符串。
Mike Chamberlain
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.