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

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

$res = true;

我需要转换的值的格式为:"true" "false",而不是"0" "1"

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

我试过了:

$converted_res = string($res);
$converted_res = String($res);
但是它告诉我stringString不是被识别的函数 如何将这个布尔值转换为PHP中的"true""false"格式的字符串?< / p >
278799 次浏览

最简单的解决方案:

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

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

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

为什么不这样做呢?:

if ($res) {
$converted_res = "true";
}
else {
$converted_res = "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"

这里的其他解决方案都有注意事项(尽管它们解决了当前的问题)。如果你(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';

适用于布尔输入,但将其他所有内容(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是字符串还是布尔值。

只是想更新一下,在PHP >= 5.50中,你可以用boolval()来做同样的事情

参考

我不喜欢接受的答案,因为它将任何计算为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';

boolval()适用于复杂的表,其中声明变量和添加循环和过滤器都不起作用。例子:

$result[$row['name'] . "</td><td>" . (boolval($row['special_case']) ? 'True' : 'False') . "</td><td>" . $row['more_fields'] = $tmp

其中$tmp是用于转置其他数据的键。在这里,我希望表在1处显示“Yes”,在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)

这也适用于任何类型的价值:

$a = true;


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

代码:

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

编辑基于@sebastian-norr的建议,指出$bool变量可能是也可能不是一个真正的01。例如,在PHP中运行布尔测试时,2解析为true

作为解决方案,我使用了类型强制转换来确保将$bool转换为01
但我不得不承认,简单的表达式$bool ? 'true' : 'false'要干净得多

我下面使用的解决方案永远不应该使用,LOL。
这就是为什么不…

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

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


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

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

var_export的问题是它将null转换为字符串"NULL",也将空字符串转换为"''",这是不可取的。我找不到简单的解决办法。

这是我最终使用的代码:

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

如果你喜欢,也可以简单地添加一个函数。

如何转换为整数,然后到字符串?

$ php -a
Interactive mode enabled


php > $a = true;
php > $b = false;
php > $c = (string)(int)$a;
php > $d = (string)(int)$b;
php > var_dump($c);
string(1) "1"
php > var_dump($d);
string(1) "0"
php >

如果直接将布尔值转换为字符串会发生什么?

$ php -a
Interactive mode enabled


php > $a = true;
php > $b = false;
php > $c = (string)$a;
php > $d = (string)$b;
php > var_dump($c);
string(1) "1"
php > var_dump($d);
string(0) ""
php >

false转换为字符串将产生一个空字符串""

试试这个:

 $value = !is_bool($value) ? $value : ( $value ? "true" : "false");