[英]How to Convert Boolean to String
我有一個 Boolean 變量,我想將其轉換為字符串:
$res = true;
我需要轉換后的值是以下格式: "true" "false"
,而不是"0" "1"
$converted_res = "true";
$converted_res = "false";
我試過了:
$converted_res = string($res);
$converted_res = String($res);
但它告訴我string
和String
不是可識別的函數。
如何將這個Boolean轉換成PHP中格式為"true"
或"false"
的字符串?
最簡單的解決方案:
$converted_res = $res ? 'true' : 'false';
另一種方法: 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 中轉換為字符串。 但是,這不會將布爾值轉換為“true”或“false”的實際拼寫,因此您必須自己執行此操作。 這是一個示例函數:
function strbool($value)
{
return $value ? 'true' : 'false';
}
echo strbool(false); // "false"
echo strbool(true); // "true"
這里的其他解決方案都有一些警告(盡管它們解決了手頭的問題)。 如果您 (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
的作用以及第二個參數是什么。
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'
($res) ? 'true' : 'false';
($res) ? 'true' : 'false';
適用於布爾輸入,但將其他所有內容(整數、字符串)轉換為真/假。
// OK
true ? 'true' : 'false' // 'true'
// OK
false ? 'true' : 'false' // 'false'
// NOT OK
'' ? 'true' : 'false' // 'false'
// NOT OK
0 ? 'true' : 'false' // 'false'
json_encode()
與var_export
相同的問題,並且可能更糟,因為json_encode
無法知道字符串true
是字符串還是布爾值。
為什么不這樣做?:
if ($res) {
$converted_res = "true";
}
else {
$converted_res = "false";
}
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
根據@sebastian-norr 建議進行編輯,指出$bool
變量可能是也可能不是真正的0
或1
。 例如, 2
在 PHP 中通過布爾測試運行時解析為true
。
作為一種解決方案,我使用類型轉換來確保我們將$bool
轉換為0
或1
。
但我不得不承認這個簡單的表達式$bool ? 'true' : 'false'
$bool ? 'true' : 'false'
更干凈。
永遠不要使用我在下面使用的解決方案,大聲笑。
這就是為什么不...
為了避免重復,包含布爾值的字符串表示的數組可以存儲在一個常量中,該常量可以在整個應用程序中使用。
// 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;
如果您願意,也可以簡短、簡單且容易地添加一個函數。
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' : '')
。
這也適用於任何類型的值:
$a = true;
echo $a // outputs: 1
echo value_To_String( $a ) // outputs: true
代碼:
function valueToString( $value ){
return ( !is_bool( $value ) ? $value : ($value ? 'true' : '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();
}
}
$converted_res = isset ( $res ) ? ( $res ? 'true' : 'false' ) : 'false';
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 -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");
只是想更新,在PHP >= 5.50你可以做boolval()
做同樣的事情
參考這里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.