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

$string = 'false';

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

var_dump($test_mode_mail);

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

它返回,

布尔真

但它应该是布尔值为false。


当前回答

这个方法是由@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

其他回答

你也可以使用settype方法!

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

字符串总是计算为布尔值true,除非它们有一个被PHP认为是“空”的值(取自文档中的empty):

""(空字符串); "0"(0作为字符串)

如果需要根据字符串的文本值设置布尔值,则需要检查该值是否存在。

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

编辑:上面的代码是为了清晰地理解。在实际使用中,下面的代码可能更合适:

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

或者使用filter_var函数可以覆盖更多的布尔值:

filter_var($string, FILTER_VALIDATE_BOOLEAN);

Filter_var涵盖了整个范围的值,包括真值“true”,“1”,“yes”和“on”。请看这里了解更多细节。

(boolean)json_decode(strtolower($string))

它处理$string的所有可能变体

'true'  => true
'True'  => true
'1'     => true
'false' => false
'False' => false
'0'     => false
'foo'   => false
''      => 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
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。