文字列を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
であるべきです。
PHPによって「空」と見なされる値がない限り、文字列は常に真偽値trueと評価されます( empty
から引用):
""
(空の文字列)。"0"
(文字列として0)文字列のテキスト値に基づいてブール値を設定する必要がある場合は、その値が存在するかどうかを確認する必要があります。
$test_mode_mail = $string === 'true'? true: false;
編集:上記のコードは理解を明確にするためのものです。実際の使用では、次のコードがより適切かもしれません。
$test_mode_mail = ($string === 'true');
このメソッドは、コメント内の@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
文字列"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');
どちらの場合も$bool
はTRUE
になります。 GordonMが示唆するように、あなたはそれを手動で行わなければなりません。
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を使用する以外の方法でもサーバーに送信されるブール値で機能します。)
あなたはそのブール値をデコードするためにjson_decodeを使うことができます
$string = 'false';
$boolean = json_decode($string);
if($boolean) {
// Do something
} else {
//Do something else
}
(boolean)json_decode(strtolower($string))
それは$string
のすべての可能な変種を処理します
'true' => true
'True' => true
'1' => true
'false' => false
'False' => false
'0' => false
'foo' => false
'' => false
あなたは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";
?>
最も簡単なことはこれです。
$str = 'TRUE';
$boolean = strtolower($str) == 'true' ? true : false;
var_dump($boolean);
こうすることで、一連の 'true'、 'TRUE'、 'false'、または 'FALSE'をループして、ストリング値をブール値にすることができます。
あなたの "ブール値"変数が$ _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
function stringToBool($string){
return ( mb_strtoupper( trim( $string)) === mb_strtoupper ("true")) ? TRUE : FALSE;
}
または
function stringToBool($string) {
return filter_var($string, FILTER_VALIDATE_BOOLEAN);
}
他の答えは物事を複雑にし過ぎています。この質問は単に logic questionです。あなたの声明を正しくしなさい。
$boolString = 'false';
$result = 'true' === $boolString;
今あなたの答えはどちらかになります
'false'
の場合はfalse
、'true'
の場合はtrue
。私はfilter_var( $boolString, FILTER_VALIDATE_BOOLEAN );
がまだより良いオプションであることに注意しなければなりません もし true
のエイリアスとしてon/yes/1
のような文字列が必要な場合。
Settypeメソッドも使えます。
SetType($ var、 "Boolean")エコー$ var // 0または1を参照
@ GordonMによる答えは良いです。しかし、$string
がすでにtrue
であると(つまり、文字列は文字列ではなく真偽値がTRUE)、失敗します。
彼の答えを拡張して、私は使用します:
$test_mode_mail = ($string === 'true' OR $string === true));
大文字と小文字を区別しない文字列 "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;
}
私は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']);
strvalはこれ以上のことをするでしょう。
ドキュメントを参照してください。 http://php.net/manual/en/function.strval.php
$my_istrue = true;
echo 'hi '.strval($my_istrue); // returns "hi 1"
うーん私はそのような問題を抱えていたと私は簡単な方法でやったそしてその作業OK
$string = 'false';
if( $string == 'true'){
$string = true;
}else if($string == 'false'){
$string= false;
}
私は以下のアプローチを使用しています。
$test = "true";
$test == 'false' ? $test = false : $test = true;
echo $test;
if(empty($test)){
echo "IT IS FALSE";
}
if($test){
echo "IT IS TRUE";
}