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

$string = 'false';

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

var_dump($test_mode_mail);

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

它返回,

布尔真

但它应该是布尔值为false。


当前回答

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

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

其他回答

你应该能够使用(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

你也可以使用settype方法!

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

使用preg_match()编辑显示工作解决方案;根据包含true的字符串返回布尔值true或false。与其他答案相比,这可能比较重,但可以很容易地调整以适合布尔值需要的任何字符串。

$test_mode_mail = 'false';      
$test_mode_mail = 'true'; 
$test_mode_mail = 'true is not just a perception.';

$test_mode_mail = gettype($test_mode_mail) !== 'boolean' ? (preg_match("/true/i", $test_mode_mail) === 1 ? true:false):$test_mode_mail;

echo ($test_mode_mail === true ? 'true':'false')." ".gettype($test_mode_mail)." ".$test_mode_mail."<br>"; 
function stringToBool($string){
    return ( mb_strtoupper( trim( $string)) === mb_strtoupper ("true")) ? TRUE : FALSE;
}

or

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

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

var_dump($test_mode_mail);

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

你必须手动操作