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

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

其他回答

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

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

您可以使用json_decode来解码布尔值

$string = 'false';
$boolean = json_decode($string);
if($boolean) {
  // Do something
} else {
  //Do something else
}

字符串“false”实际上被PHP视为“TRUE”值。 文件说:

To explicitly convert a value to boolean, use the (bool) or (boolean) casts. However, in most cases the cast is unnecessary, since a value will be automatically converted if an operator, function or control structure requires a boolean argument. See also Type Juggling. When converting to boolean, the following values are considered FALSE: the boolean FALSE itself the integer 0 (zero) the float 0.0 (zero) the empty string, and the string "0" an array with zero elements an object with zero member variables (PHP 4 only) the special type NULL (including unset variables) SimpleXML objects created from empty tags Every other value is considered TRUE (including any resource).

所以如果你这样做:

$bool = (boolean)"False";

or

$test = "false";
$bool = settype($test, 'boolean');

在这两种情况下,$bool将为TRUE。所以你必须手动操作,就像GordonM建议的那样。