ブールを文字列に変換する方法


242

文字列に変換したいブール変数があります:

$res = true;

変換された値は次の形式である必要があります:"true" "false"ではなく"0" "1"

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

私はもう試した:

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

しかし、それは、と言われますstringし、String機能が認識されません。
このブール値をPHP 形式"true"または"false"PHP 形式の文字列に変換するにはどうすればよいですか?


1
新しい使用関数((string)$ param [boolean type]){if($ param){....}}(string)false => "false"はfalseではないため...
zloctb

回答:


361

最も簡単なソリューション:

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


1
これは最も簡単な方法ですが、何が必要かによって異なります。
Androme、

1
@DoomStone私はそれが3年になったことを知っていますが、場合によってはそれが最良の解決策ではないと考えさせられるものを知りたかっただけです。この?:表記は、この状況で考えられる最も単純なコードです。
caiosm1005 2013

1
たとえば、私にとっては、これは現在のケースに最適な解決策ではありません。戻り値のタイプがわからない。ブール値か何かかもしれません。(デバッグ中に他の誰かが書いた関数を呼び出します。)ソリューションは$ resをブール値に変換しますが、var_exportは可能なすべての型を処理できます。

13
@ user2443147ブール型であることは、文字通り質問で言及された最初の事実です。処理するタイプがわからない場合は、最初に他にも問題が発生します。
nem75

3
三項演算子と文字列連結を混在させる場合は、追加の括弧が必要になることに注意してください。echo '<active>' . $res ? 'true' : 'false' . '</active>';望ましい結果は得られませんecho '<active>' . ($res ? 'true' : 'false') . '</active>';
Salman A

194

関数var_exportは変数の文字列表現を返すので、これを行うことができます:

var_export($res, true);

2番目の引数は、文字列をエコーするのではなく、返すように関数に指示します。


完璧な答え。これは、「...変数の
解析可能

62

別の方法: json_encode( booleanValue )

echo json_encode(true);  // string "true"

echo json_encode(false); // string "false"

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

6
意味的に使用var_export()することは、操作の意図に沿ってより維持されていると思います(JSONの文字列が必要でない限り、;-)
Adam Cameron

3
これは本当に、JSON表現がたまたま求められているものと同じになるという副作用に依存しています。また、JSON拡張機能がインストールされて有効になっていることにも依存しています。だから私見これはクリーンなソリューションではありません。
Nick Rice

35

var_exportを参照してください


3
詳細については、クリスチャンの回答を参照してください。具体的には、2番目の引数(true)を含めます。
ジモシー2013年

これは「リンクのみ」の回答であり、「回答」のSOガイドラインに準拠していません。てくださいeditあなたのポストへのリンクから、関連する情報を含めること。情報は有用ですが、OPへの「コメント」としてより適切に残されます。リンクから必要なすべての情報を回答に埋め込む必要があります。1)リンクが到達不能になると、この投稿は役に立たなくなります。2)訪問者は外部リンクを訪問するように要求されるべきではありません。とはいえ、ドキュメント、ソース、または追加情報へのリンクを強くお勧めします。あなたの貢献をありがとう。
SherylHohman

12

PHPで文字列に変換するには、strval()または(string)を使用します。ただし、これはブール値を実際の「true」または「false」のスペルに変換しないため、自分で行う必要があります。次に関数の例を示します。

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

もし$val = true;、その後strval($val)(string) $val両方のリターン1
ABach

9

ここでの他のソリューションにはすべて注意点があります(ただし、それらは目前の問題に対応しています)。(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て、何が行われ、2番目のパラメーターが何であるかを理解する必要があります。

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';

ブール入力で機能しますが、その他すべて(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_encodetrue


var_export()おかげで、特定のユースケースに最適なようです。
Gianluigi Zane Zanettini博士2015

PHP 5.5以降のインストールでvar_export(boolval($var), true)は、値を文字列「true」または「false」に変換するための安全な方法です。
かすかな信号2016年

if (is_bool($res) { $res = $res ? 'true' : 'false'; } <<これは機能しません- ) おそらく使用する方が良いでしょう$result = (is_bool($var) && $var) ? 'true' : 'false';
mtizziani

@aleembについて: $value = is_bool($value) ? var_export($value, true) : $value;この方法では、値をそのままにして、ブール値のみを文字列表現に変更します。
dickwan

最初のコード行には、次のものが含まれています。 $res = $res ?? もしかして:$res == $res?またはさらに:$res === $res
SherylHohman

2

なぜこのようにしないのですか?:

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

2

私にとってはnull、でない限り文字列表現が必要でした。その場合はそのままにしておきましたnull

var_exportの問題はnull、文字列に"NULL"変換され、空の文字列もに変換されることです。"''"です。これは望ましくあり。簡単な解決策はありませんでした。

これは私が最後に使用したコードでした:

if (is_bool($val)) $val ? $val = "true" : $val = "false";
else if ($val !== null) $val = (string)$val;

短くてシンプルで、必要に応じて関数を簡単に投入することもできます。


1

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' : '')


1
いつboolval(some_expression) ? .. : ..動作が異なりsome_expression ? .. : ..ますか?
ToolmakerSteve

1

これは、あらゆる種類の値に対しても機能します。

$a = true;

echo $a                     // outputs:   1
echo value_To_String( $a )  // outputs:   true

コード:

function valueToString( $value ){ 
    return ( !is_bool( $value ) ?  $value : ($value ? 'true' : 'false' )  ); 
}

1

@ sebastian-norrの提案に基づいて編集され、$bool変数がtrue 0またはでない場合があることを指摘しています1。たとえば、PHPのブールテストで実行2するとtrueに解決されます。

解決策として、型キャストを使用して$bool0またはに確実に変換し1ます。
しかし、私は単純な表現$bool ? 'true' : 'false'がはるかにきれいであることを認めなければなりません。

以下で使用する私のソリューションは使用しないでください、LOL。
ここに理由はありません...

繰り返しを避けるために、ブール値の文字列表現を含む配列を定数に格納して、アプリケーション全体で使用できるようにすることができます。

// Make this constant available everywhere in the application
const BOOLEANS = ['true', 'false'];

$bool = true;
echo BOOLEANS[(bool)  $bool]; // 'true'
echo BOOLEANS[(bool) !$bool]; // 'false'

0

私は受け入れられた回答のファンではありません。それは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();        
    }
}

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

issetここでは必要ありません。phpでは、if-testはとの両方nullでfalseですvariable not defined$converted_res = ( $res ? 'true' : 'false' );古い回答で見られるように単純に行うことができます。
ToolmakerSteve、

0
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)

-2

更新したかっただけですが、PHP 5.50以降でboolval()は、同じことを行うことができます

参照はこちら


3
これは(bool) $var;
Al.G

ありがとうございました!これは私にとって複雑なテーブルでうまくいきました。次のように使用しました:"<td>" . (boolval($row['special_case']) ? 'Yes' : ' ') . "</td>"
motorbaby 2017年

4
boolval()逆の方法で、任意の型の変数をブールからストリングに変換するのではなく、ブールに変換します。
マイクチェンバレン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.