如何将布尔转换为string

我有一个布尔variables,我想要转换为一个string

$res = true; 

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

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

我试过了:

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

但它告诉我stringString不被识别的function。 如何将这个布尔值转换为格式“true”或“false”在PHP中的string?

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

函数var_export返回一个variables的string表示,所以你可以这样做:

 var_export($res, true); 

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

请参阅var_export

另一种方法: json_encode( booleanValue )

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

您可以使用strval()或(string)将其转换为PHP中的string。 但是,这不会将布尔转换为“真”或“假”的实际拼写,所以您必须自己做。 这是一个示例函数:

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

这里的其他解决scheme都有警告(尽pipe他们正在处理这个问题)。 如果您(1)循环使用混合types,或者(2)需要可以作为函数导出或包含在实用程序中的通用解决scheme,则此处没有其他解决scheme可以使用。

最简单,最明确的解决scheme是:

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

适用于booleaninput,但将其他内容转换为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'; ($res) ? 'true' : 'false';

适用于布尔input,但将所有其他(int,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无法知道string是否是一个string或布尔值。

USE 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 

为什么不这样做呢?

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

我不是所接受的答案的粉丝,因为它将任何评估为false的内容转换为"false"而不仅仅是布尔值,反之亦然。

无论如何,这是我的OTT答案,它使用var_export函数。

var_export可以处理除resource外的所有variablestypes,我已经创build了一个函数,它将根据提供的参数对string( (string) ),严格转换( var_export )和types检查执行常规转换。

 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()适用于复杂的表格,其中声明variables和添加循环和filter不起作用。 例:

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

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

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

参考这里