如何将字符串转换为布尔值?

$string = 'false';

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

var_dump($test_mode_mail);

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

它返回,

布尔真

但它应该是布尔值为false。


当前回答

最简单的方法是:

$str = 'TRUE';

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

var_dump($boolean);

这样做,你可以循环一系列'true', 'true', 'false'或'false',并将字符串值获取为布尔值。

其他回答

你也可以使用settype方法!

$string = 'false';
$boolean = settype($string,"boolean");
var_dump($boolean); //see 0 or 1

这个方法是由@lauthiamkok在评论中发布的。我把它贴在这里作为一个答案,以引起更多的关注。

根据需要,您应该考虑使用带有FILTER_VALIDATE_BOOLEAN标志的filter_var()。

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

如果你的“布尔”变量来自一个全局数组,如$_POST和$_GET,你可以使用filter_input()过滤函数。

例如POST:

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

如果你的“布尔”变量来自其他来源,你可以使用filter_var()过滤函数。

例子:

filter_var('true', FILTER_VALIDATE_BOOLEAN); // true
$string = 'false';

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

var_dump($test_mode_mail);

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

你必须手动操作

@GordonM的回答很好。 但如果$string已经为真(即,字符串不是字符串而是布尔true),它将失败…这似乎不合逻辑。

延伸一下他的回答,我会用:

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