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

$string = 'false';

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

var_dump($test_mode_mail);

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

它返回,

布尔真

但它应该是布尔值为false。


当前回答

我对wordpress shortcode属性感到困惑,我决定写一个自定义函数来处理所有可能性。也许对某些人有用:

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']);

其他回答

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

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

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

你应该能够使用(bool)强制转换为布尔型,但我不确定没有检查这是否适用于字符串“true”和“false”。

不过这可能值得一试

$myBool = (bool)"False"; 

if ($myBool) {
    //do something
}

值得注意的是,当将以下内容放入其中时,将计算为布尔值False

if()

布尔值FALSE本身 整数0(零) 浮点数0.0(零) 空字符串和字符串"0" 零元素数组 一个没有成员变量的对象(仅适用于PHP 4) 特殊类型NULL(包括未设置的变量) 从空标记创建的SimpleXML对象

其他的都是真。

如下所述: http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

最简单的方法是:

$str = 'TRUE';

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

var_dump($boolean);

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

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。

(boolean)json_decode(strtolower($string))

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

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