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

$string = 'false';

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

var_dump($test_mode_mail);

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

它返回,

布尔真

但它应该是布尔值为false。


当前回答

我这样做的方式将字符串“false”的任何大小写不敏感版本强制转换为布尔值false,但将使用正常的php强制转换规则对所有其他字符串执行强制转换。我认为这是防止意外行为的最好方法。

$test_var = 'False';
$test_var = strtolower(trim($test_var)) == 'false' ? FALSE : $test_var;
$result = (boolean) $test_var;

或作为一个函数:

function safeBool($test_var){
    $test_var = strtolower(trim($test_var)) == 'false' ? FALSE : $test_var;
    return (boolean) $test_var;
}

其他回答

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

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

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

字符串总是计算为布尔值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
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。

字符串“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建议的那样。