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


318

文字列をどのように変換でき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


$ bool = !! $ string1についてなぜ答えたのですか?
zloctb 2013年

1
@zloctbは質問に答えないため。!!$string1最高評価の回答で概説されている文字列を示すブール値を返します。
David Barker、

回答:


347

PHPによって "空"と見なされる値(のドキュメントemptyから取得)がない限り、文字列は常にブール値trueと評価されます。

  1. "" (空の文字列);
  2. "0" (0は文字列)

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

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

編集:上記のコードは理解を明確にすることを目的としています。実際の使用では、次のコードがより適切な場合があります。

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

または、このfilter_var関数を使用すると、より多くのブール値をカバーできます。

filter_var($string, FILTER_VALIDATE_BOOLEAN);

filter_vartruthy値を含む値の全範囲をカバーし"true""1""yes"および"on"。詳細はこちらをご覧ください。


5
:あなたはあなたが何をやっているじゃない場合、私は、常に厳密な比較を使用することをお勧めします$string === 'true'
Znarkus

248
私はこれを見つけました- filter_var($string, FILTER_VALIDATE_BOOLEAN);それは良いことですか?
ラウコク、2011

10
三元は必要ないようです。$ test_mode_mailを不等式の値に設定しないのはなぜですか?$ test_mode_mail = $ string === 'true'
Tim Banks

3
しかし、1/0、TRUE / FALSEはどうでしょうか?@lauthiamkokの答えが一番だと思います。
ryabenko-pro

1
@FelipeTadeo PHPがブール演算に関して文字列を評価する方法について話しているので、eval()について言及したことはありません。文字列 "(3 <5)"は空ではないため、ブールtrueとしてPHPによって評価されます。
GordonM 2013

648

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

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

filter_var(    true, FILTER_VALIDATE_BOOLEAN); // true
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(   '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

5
ドキュメントによると、この関数はPHP 5> = 5.2.0で使用できます。php.net/manual/en/function.filter-var.php
Westy92、

4
私は、true、false、on、0などの値を持つWordPressショートコード属性に基づいてブール値を設定するためのこのソリューションが本当に好きです。素晴らしい答えは間違いなく受け入れられる答えです。
AndyWarren 2017年

11
filter_var($answer, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)私にとってはさらにうまくいきました。php.net/manual/en/function.filter-var.php#121263を
Ryan

!! 重要な注意点 !!filter_varは、フィルターが失敗した場合にもFALSEを返します。これにより、いくつかの問題が発生する可能性があります。
AFA Med 2017年

35

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

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

タイプジャグリングも参照してください。

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

  • ブール値FALSE自体

  • 整数0(ゼロ)

  • float 0.0(ゼロ)

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

  • 要素がゼロの配列

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

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

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

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

だからあなたがするなら:

$bool = (boolean)"False";

または

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

どちらの場合もに$boolなりますTRUE。したがって、GordonMが提案するように、手動で行う必要があります。


1
もちろん、下の方はfalseを返します。実際、それは致命的な:) "致命的なエラー:参照によって渡されるのは変数のみです"をスローします。$ a = 'False'; settype($ a、 'boolean'); var_dump($ a); 確かにfalseを返します。
2016年

16

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以外の方法でサーバーに送信されます。)


11

json_decodeを使用してそのブール値をデコードできます

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

指定された文字列が整数の場合、json_decodeも整数に変換されます
MihaiRăducanuAug

1
はい、それは本当ですが、文字列がブール値を保持していると言及されています
souparno majumder

8
(boolean)json_decode(strtolower($string))

可能なすべてのバリアントを処理します $string

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

何についてonoff
Cyclonecode 2018年

7

「ブール」変数が$ _POSTや$ _GETなどのグローバル配列からのものである場合は、filter_input()フィルター関数を使用できます。

POSTの例:

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

「ブール」変数が他のソースからのものである場合は、filter_var()フィルター関数を使用できます。

例:

filter_var('true', FILTER_VALIDATE_BOOLEAN); // true

7

使用できます 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


2
echo boolval('false');=> 1
Mubashar

echo (int)'false;またはecho intval('false');
anayarojo

@anayarojo (int)'true'intval('true')どちらも0を返します(すべての文字列は同じです)
sketchyTech

4

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

$str = 'TRUE';

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

var_dump($boolean);

このようにすると、一連の「true」、「TRUE」、「false」、または「FALSE」をループして、文字列値をブール値に取得できます。


3

他の答えは複雑なものを超えています。この質問は単に論理的な質問です。あなたの発言を正しくしてください。

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

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

  • false、文字列がだった場合'false'
  • またはtrue、文字列がだった場合'true'

のエイリアスのような文字列が必要な場合filter_var( $boolString, FILTER_VALIDATE_BOOLEAN );、より良いオプションになることに注意する必要があります。on/yes/1true


3
function stringToBool($string){
    return ( mb_strtoupper( trim( $string)) === mb_strtoupper ("true")) ? TRUE : FALSE;
}

または

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

3
filter_var($string, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);

$string = 1; // true
$string ='1'; // true
$string = 'true'; // true
$string = 'trUe'; // true
$string = 'TRUE'; // true
$string = 0; // false
$string = '0'; // false
$string = 'false'; // false
$string = 'False'; // false
$string = 'FALSE'; // false
$string = 'sgffgfdg'; // null

指定する必要があります

FILTER_NULL_ON_FAILURE
そうしないと、$ stringに他の文字列が含まれていても、常にfalseになります。


2

settypeメソッドも使用できます!

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


2

大文字と小文字を区別しないバージョンの文字列 "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

@GordonMの答えはいいです。しかし、$string既にある場合true(つまり、文字列が文字列ではなくブール値のTRUEである場合)は失敗します。

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

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

0

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

-1

簡単な方法は、真と見なす値の配列に対してチェックすることです。

$wannabebool = "false";
$isTrue = ["true",1,"yes","ok","wahr"];
$bool = in_array(strtolower($wannabebool),$isTrue);

-1

ここで言及されていない可能性を示すために編集しました。私の元の回答はOPの質問とは関係がなかったためです。

preg_match(); 使用可能です。ただし、ほとんどのアプリケーションでは、他の回答よりも使用する方がはるかに重いでしょう。

if (preg_match("/true/i", "true PHP is a web scripting language of choice.")) {
    echo "<br><br>Returned true";
} else {
    echo "<br><br>Returned False";
}

/(?:true)|(?:1)/i特定の状況で必要に応じて使用することもできます。「false」と「1」の両方を含む文字列を評価すると、正しく返されません。


これは尋ねられたものではありません。問題は、文字列をブール値に変換する方法です。
mrdedが

mrded:謝罪した質問を読み間違えました。だから精神的に良い形で、ここで言及されていない別の可能性を追加します。
JSG

-1

PHPでは、単純に二重否定演算子!!)を使用して値をブール値に変換できます。

var_dump(!! true);     // true
var_dump(!! "Hello");  // true
var_dump(!! 1);        // true
var_dump(!! [1, 2]);   // true
var_dump(!! false);    // false
var_dump(!! null);     // false
var_dump(!! []);       // false
var_dump(!! 0);        // false
var_dump(!! '');       // false

-4

(bool)を使用してブール値にキャストできるはずですが、これが文字列「true」と「false」で機能するかどうかを確認しないとわかりません。

これはポップの価値があるかもしれません

$myBool = (bool)"False"; 

if ($myBool) {
    //do something
}

次のコードは、中に入れるとブール値のFalseに評価されます。

if()
  • ブール値FALSE自体
  • 整数0(ゼロ)
  • float 0.0(ゼロ)
  • 空の文字列と文字列 "0"
  • 要素がゼロの配列
  • メンバー変数がゼロのオブジェクト(PHP 4のみ)
  • 特殊なタイプNULL(未設定の変数を含む)
  • 空のタグから作成されたSimpleXMLオブジェクト

他のすべてはtrueと評価されます。

ここで説明するように:http ://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting


6
最初の段落の推測に応じて、ブール値への明示的なキャストを使用すると、に変換さ"false"trueます。
Mark Amery 2013年

2
これは「true」を出力します$myBool = (bool)"False"; if ($myBool) { echo "true"; }
SSH This This

2
これは間違っています。文字列は、 ""または "0"が含まれていない限り、trueと評価されます。
マイケルJ.カルキンス2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.