Php 如何将布尔值转换为字符串
我有一个布尔变量,我想将其转换为字符串:Php 如何将布尔值转换为字符串,php,string,Php,String,我有一个布尔变量,我想将其转换为字符串: $res = true; 我需要转换后的值的格式为:“true”或“false”,而不是“0”或“1” 我试过: $converted_res = string($res); $converted_res = String($res); 但是它告诉我,string和string是不可识别的函数。 如何在PHP中将此布尔值转换为“true”或“false”格式的字符串?最简单的解决方案: $converted\u res=$res?“真’:‘假’在PH
$res = true;
我需要转换后的值的格式为:“true”或“false”
,而不是“0”或“1”
我试过:
$converted_res = string($res);
$converted_res = String($res);
但是它告诉我,string
和string
是不可识别的函数。如何在PHP中将此布尔值转换为
“true”
或“false”
格式的字符串?最简单的解决方案:
$converted\u res=$res?“真’:‘假’代码>在PHP中使用strval()或(string)转换为字符串。
但是,这并不能将布尔值转换为“真”或“假”的实际拼写,因此您必须自己完成。
下面是一个示例函数:
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($res, true);
第二个参数告诉函数返回字符串而不是回显字符串。另一种方法:json\u encode(booleanValue)
这里的其他解决方案都有警告(尽管它们解决了眼前的问题)。如果您(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;
但是大多数阅读代码的开发人员都需要一次旅行来了解var_export
的作用以及第二个参数是什么
1. <代码>变量导出
用于boolean
输入,但也将所有其他内容转换为字符串
// 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)?'真’:‘假’代码>
适用于布尔输入,但将其他所有内容(整数、字符串)转换为真/假
// 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\u export
相同的问题,可能更糟,因为json\u encode
无法知道字符串true
是字符串还是布尔值。只是想更新,在PHP>=5.50中,您可以执行boolval()
来做同样的事情
我不喜欢公认的答案,因为它将任何计算结果为false的东西转换为
“false”
而不仅仅是布尔值,反之亦然
不管怎样,这是我的O.T.T答案,它使用函数
var\u export
适用于除resource
之外的所有变量类型,我创建了一个函数,该函数将根据提供的参数执行常规转换为字符串((string)
)、严格转换(var\u 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();
}
}
boolval()。例如:
$result[$row['name'] . "</td><td>" . (boolval($row['special_case']) ? 'True' : 'False') . "</td><td>" . $row['more_fields'] = $tmp
$result[$row['name']。”($boolval($row['special\u case'])?'True':'False')。”。$row['more\u fields']=$tmp
其中,$tmp
是一个用于转置其他数据的键。在这里,我希望表对1显示“Yes”,对0显示“nothing”,因此使用了(布尔瓦尔($row['special_case'])?“Yes':”)
这也适用于任何类型的值:
$a = true;
echo $a // outputs: 1
echo value_To_String( $a ) // outputs: true
代码:
根据@sebastian norr的建议编辑了,指出$bool
变量可能是真的0
或1
。例如,2
在PHP中通过布尔测试运行时解析为true
作为一种解决方案,我使用类型转换来确保将$bool
转换为0
或1
但我必须承认,简单的表达式$bool?'true':'false'
更简洁
我下面使用的解决方案永远不应该使用,哈哈。
这就是为什么不
为了避免重复,包含布尔值的字符串表示形式的数组可以存储在一个常量中,该常量可以在整个应用程序中使用
//使此常量在应用程序中的任何位置都可用
常量布尔值=['true','false'];
$bool=true;
回声布尔值[(bool)$bool];/“真”
回声布尔值[(bool)!$bool];/“false”
对我来说,我想要一个字符串表示,除非它是null
,在这种情况下,我希望它保持null
var_导出的问题是它将null
转换为字符串“null”
,并且它还将空字符串转换为“'
,这是不可取的。我找不到简单的解决方案
这就是我最后使用的代码:
if (is_bool($val)) $val ? $val = "true" : $val = "false";
else if ($val !== null) $val = (string)$val;
如果您愿意,也可以简单快捷地插入函数。如果$val=true;
则strval($val)
和(字符串)$val
两者都返回1。这是最简单的方法,但这取决于你需要什么,因为它可能不是最好的解决方案。@DoomStone我知道已经3年了,但我只是想知道是什么让你认为在某些情况下它不是最好的解决方案。?:
符号是我们在这里能想到的最简单的代码例如,对于我来说,这并不是当前情况的最佳解决方案:我不确定返回值的类型;它可能是布尔值或其他类型(调用其他人在调试期间编写的函数)您的解决方案将$res转换为boolean,而var_export可以处理所有可能的类型。@user2443147问题中提到的第一个事实是布尔类型。如果您不确定要处理的类型,则首先会遇到一系列其他问题。请注意,在混合三元类型时需要额外的括号运算符和字符串连接。echo'.$res?'true':'false'。;
不产生所需的结果,echo'.($res?'true':'false')。;
产生。有关详细信息,请参阅。具体包括第二个参数(true)。这是一个“仅链接”答案,不符合“答案”的指导原则。请编辑以包含相关信息
$result[$row['name'] . "</td><td>" . (boolval($row['special_case']) ? 'True' : 'False') . "</td><td>" . $row['more_fields'] = $tmp
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' ) );
}
if (is_bool($val)) $val ? $val = "true" : $val = "false";
else if ($val !== null) $val = (string)$val;