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

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

其他回答

其他的答案是过于复杂的事情。这是一个简单的逻辑问题。只要你的陈述正确就行了。

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

现在你的答案是两者之一

False,如果字符串是' False ', 或者true,如果你的字符串为true。

我必须注意filter_var($boolString, FILTER_VALIDATE_BOOLEAN);如果你需要像on/yes/1这样的字符串作为true的别名,仍然是一个更好的选择。

一种简单的方法是检查您认为为真值的数组。

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

当使用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。)

$string = 'false';

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

var_dump($test_mode_mail);

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

你必须手动操作

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

or

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