如何将布尔转换为string
我有一个布尔variables,我想要转换为一个string
$res = true;
我需要它的转换值也是在格式"true" "false"
不是"0" "1"
$converted_res = "true"; $converted_res = "false";
我试过了:
$converted_res = string($res); $converted_res = String($res);
但它告诉我string
和String
不被识别的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
适用于boolean
input,但将其他内容转换为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()
做同样的事情
参考这里 。