web-dev-qa-db-ja.com

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

文字列をbooleanに変換するにはどうすればいいですか?

$string = 'false';

$test_mode_mail = settype($string, 'boolean');

var_dump($test_mode_mail);

if($test_mode_mail) echo 'test mode is on.';

それは戻る、

真偽値true

しかし、それはboolean falseであるべきです。

269
laukok

PHPによって「空」と見なされる値がない限り、文字列は常に真偽値trueと評価されます( empty から引用):

  1. ""(空の文字列)。
  2. "0"(文字列として0)

文字列のテキスト値に基づいてブール値を設定する必要がある場合は、その値が存在するかどうかを確認する必要があります。

$test_mode_mail = $string === 'true'? true: false;

編集:上記のコードは理解を明確にするためのものです。実際の使用では、次のコードがより適切かもしれません。

$test_mode_mail = ($string === 'true');
292
GordonM

このメソッドは、コメント内の@lauthiamkokによって投稿されました。私はそれにもっと注意を向けるための答えとしてここに投稿しています。

必要に応じて、filter_var()FILTER_VALIDATE_BOOLEANフラグの併用を検討してください。

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('asdfasdf', FILTER_VALIDATE_BOOLEAN); // false
filter_var(        '', FILTER_VALIDATE_BOOLEAN); // false
filter_var(      null, FILTER_VALIDATE_BOOLEAN); // false
568
Brad

文字列"false"は、実際にはPHPでは"TRUE"値と見なされています。ドキュメントは言う:

値を明示的にブール値に変換するには、(bool)または(boolean)キャストを使用します。ただし、演​​算子、関数、または制御構造体にブール引数が必要な場合は値が自動的に変換されるため、ほとんどの場合キャストは不要です。

Type Jugglingも参照してください。

ブール値に変換するときは、次の値がFALSEと見なされます。

  • ブール値FALSE自体

  • 整数0(ゼロ)

  • float 0.0(ゼロ)

  • 空の文字列と文字列 "0"

  • 要素数0の配列

  • メンバー変数がゼロのオブジェクト(PHP 4のみ)

  • 特殊タイプNULL(未設定変数を含む)

  • 空のタグから作成されたSimpleXMLオブジェクト

他のすべての値はTRUE(すべてのリソースを含む)と見なされます。

もしそうなら:

$bool = (boolean)"False";

または

$test = "false";
$bool = settype($test, 'boolean');

どちらの場合も$boolTRUEになります。 GordonMが示唆するように、あなたはそれを手動で行わなければなりません。

31
wosis

JSONを使って作業するとき、私は$_POSTを通してブール値を送らなければなりませんでした。次のようなことをしたときにも、同じような問題がありました。

if ( $_POST['myVar'] == true) {
    // do stuff;
}

上記のコードで、私のブール値はJSON文字列に変換されました。

これを克服するために、json_decode()を使って文字列をデコードすることができます。

//assume that : $_POST['myVar'] = 'true';
 if( json_decode('true') == true ) { //do your stuff; }

(これは通常、文字列に変換され、JSONを使用する以外の方法でもサーバーに送信されるブール値で機能します。)

16
Nishanth Shaan

あなたはそのブール値をデコードするためにjson_decodeを使うことができます

$string = 'false';
$boolean = json_decode($string);
if($boolean) {
  // Do something
} else {
  //Do something else
}
11
(boolean)json_decode(strtolower($string))

それは$stringのすべての可能な変種を処理します

'true'  => true
'True'  => true
'1'     => true
'false' => false
'False' => false
'0'     => false
'foo'   => false
''      => false
7
mrded

あなたはboolval($strValue)を使うことができます

例:

<?php
echo '0:        '.(boolval(0) ? 'true' : 'false')."\n";
echo '42:       '.(boolval(42) ? 'true' : 'false')."\n";
echo '0.0:      '.(boolval(0.0) ? 'true' : 'false')."\n";
echo '4.2:      '.(boolval(4.2) ? 'true' : 'false')."\n";
echo '"":       '.(boolval("") ? 'true' : 'false')."\n";
echo '"string": '.(boolval("string") ? 'true' : 'false')."\n";
echo '"0":      '.(boolval("0") ? 'true' : 'false')."\n";
echo '"1":      '.(boolval("1") ? 'true' : 'false')."\n";
echo '[1, 2]:   '.(boolval([1, 2]) ? 'true' : 'false')."\n";
echo '[]:       '.(boolval([]) ? 'true' : 'false')."\n";
echo 'stdClass: '.(boolval(new stdClass) ? 'true' : 'false')."\n";
?>

ドキュメント http://php.net/manual/es/function.boolval.php

4
anayarojo

最も簡単なことはこれです。

$str = 'TRUE';

$boolean = strtolower($str) == 'true' ? true : false;

var_dump($boolean);

こうすることで、一連の 'true'、 'TRUE'、 'false'、または 'FALSE'をループして、ストリング値をブール値にすることができます。

4
Brandon Sanders

あなたの "ブール値"変数が$ _POSTや$ _GETのようなグローバル配列から来ているなら、あなたはfilter_input()フィルタ関数を使うことができます。

POSTの例

$isSleeping  = filter_input(INPUT_POST, 'is_sleeping',  FILTER_VALIDATE_BOOLEAN);

もしあなたの "boolean"変数が他のソースから来たものであればfilter_var() filter関数を使うことができます。

例:

filter_var('true', FILTER_VALIDATE_BOOLEAN); // true
3
SandroMarques
function stringToBool($string){
    return ( mb_strtoupper( trim( $string)) === mb_strtoupper ("true")) ? TRUE : FALSE;
}

または

function stringToBool($string) {
    return filter_var($string, FILTER_VALIDATE_BOOLEAN);
}
3
DevellMen

他の答えは物事を複雑にし過ぎています。この質問は単に logic questionです。あなたの声明を正しくしなさい。

$boolString = 'false';
$result = 'true' === $boolString;

今あなたの答えはどちらかになります

  • 文字列が'false'の場合はfalse
  • 文字列が'true'の場合はtrue

私はfilter_var( $boolString, FILTER_VALIDATE_BOOLEAN );がまだより良いオプションであることに注意しなければなりません もし trueのエイリアスとしてon/yes/1のような文字列が必要な場合。

3
kaiser

Settypeメソッドも使えます。

SetType($ var、 "Boolean")エコー$ var // 0または1を参照

2
Nai

@ GordonMによる答えは良いです。しかし、$stringがすでにtrueであると(つまり、文字列は文字列ではなく真偽値がTRUE)、失敗します。

彼の答えを拡張して、私は使用します:

$test_mode_mail = ($string === 'true' OR $string === true));
2
Ema4rl

大文字と小文字を区別しない文字列 "false"をブール値のFALSEにキャストしますが、他のすべての文字列については通常のphpキャスト規則を使用して動作します。これは予期しない動作を防ぐための最善の方法だと思います。

$test_var = 'False';
$test_var = strtolower(trim($test_var)) == 'false' ? FALSE : $test_var;
$result = (boolean) $test_var;

または機能として:

function safeBool($test_var){
    $test_var = strtolower(trim($test_var)) == 'false' ? FALSE : $test_var;
    return (boolean) $test_var;
}
2
Syntax Error

私はwordpressのショートコード属性と混同されていました、私はすべての可能性を扱うためにカスタム関数を書くことに決めました。誰かに役立つかもしれません:

function stringToBool($str){
    if($str === 'true' || $str === 'TRUE' || $str === 'True' || $str === 'on' || $str === 'On' || $str === 'ON'){
        $str = true;
    }else{
        $str = false;
    }
    return $str;
}
stringToBool($atts['onOrNot']);
1
tomi

strvalはこれ以上のことをするでしょう。

ドキュメントを参照してください。 http://php.net/manual/en/function.strval.php

  $my_istrue = true;
  echo 'hi '.strval($my_istrue); // returns "hi 1"
0
JSG

うーん私はそのような問題を抱えていたと私は簡単な方法でやったそしてその作業OK

    $string = 'false';
    if( $string == 'true'){
        $string = true;     
    }else if($string == 'false'){
        $string= false;     
    }
0
user889030

私は以下のアプローチを使用しています。

$test = "true";

$test == 'false' ? $test = false : $test = true;

echo  $test;

if(empty($test)){
    echo "IT IS FALSE";
}

if($test){
     echo "IT IS TRUE";
}
0
user3785966