簡體   English   中英

如何將 Boolean 轉換為字符串

[英]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);

但它告訴我stringString不是可識別的函數。
如何將這個Boolean轉換成PHP中格式為"true""false"的字符串?

最簡單的解決方案:

$converted_res = $res ? 'true' : '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"

您使用 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的作用以及第二個參數是什么。

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'; ($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()

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變量可能是也可能不是真正的01 例如, 2在 PHP 中通過布爾測試運行時解析為true

作為一種解決方案,我使用類型轉換來確保我們將$bool轉換為01
但我不得不承認這個簡單的表達式$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM