如何将字符串转换为 boolean
类型?
$string = 'false';
$test_mode_mail = settype($string, 'boolean');
var_dump($test_mode_mail);
if($test_mode_mail) echo 'test mode is on.';
它返回,
布尔值true
但应该是布尔值false
。
这个方法是由@lauthiamkok在评论中发布的。我将其作为答案发布在这里,以引起更多关注。
根据您的需求,您应该考虑使用filter_var()
和FILTER_VALIDATE_BOOLEAN
标志。
filter_var( true, FILTER_VALIDATE_BOOLEAN); // true
filter_var( 'true', FILTER_VALIDATE_BOOLEAN); // true
filter_var( 1, FILTER_VALIDATE_BOOLEAN); // true
filter_var( '1', FILTER_VALIDATE_BOOLEAN); // true
filter_var( 'on', FILTER_VALIDATE_BOOLEAN); // true
filter_var( 'yes', FILTER_VALIDATE_BOOLEAN); // true
filter_var( false, FILTER_VALIDATE_BOOLEAN); // false
filter_var( 'false', FILTER_VALIDATE_BOOLEAN); // false
filter_var( 0, FILTER_VALIDATE_BOOLEAN); // false
filter_var( '0', FILTER_VALIDATE_BOOLEAN); // false
filter_var( 'off', FILTER_VALIDATE_BOOLEAN); // false
filter_var( 'no', FILTER_VALIDATE_BOOLEAN); // false
filter_var('asdfasdf', FILTER_VALIDATE_BOOLEAN); // false
filter_var( '', FILTER_VALIDATE_BOOLEAN); // false
filter_var( null, FILTER_VALIDATE_BOOLEAN); // false
filter_var($answer, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)
对我来说效果更好。参见 http://php.net/manual/zh/function.filter-var.php#121263 - Ryanfilter_var($string, FILTER_VALIDATE_BOOLEAN);
在几乎所有情况下都是可用的答案。我很惊讶原帖的作者标记了其他答案为被采纳的答案。 - HenryHayes在PHP中,除非字符串的值被认为是“空”的(取自empty函数的文档),否则字符串总是被视为布尔值true:
""
(一个空字符串);"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"
。有关更多详细信息,请参见此处。
$string === 'true'
。 - Markus Hedlundfilter_var($string, FILTER_VALIDATE_BOOLEAN);
,这是个好东西吗? - Run在PHP中,字符串"false"
实际上被认为是一个"TRUE"
值。
要将一个值显式转换为布尔值,请使用(bool)或(boolean)强制转换。然而,在大多数情况下,强制转换是不必要的,因为如果运算符、函数或控制结构需要布尔参数,则值将自动转换。
另请参阅类型转换。
在转换为布尔值时,以下值被视为FALSE:
布尔值FALSE本身
整数0(零)
浮点数0.0(零)
空字符串和字符串"0"
具有零个元素的数组
没有成员变量的对象(仅适用于PHP 4)
特殊类型NULL(包括未设置的变量)
从空标记创建的SimpleXML对象
除此之外的所有值都被视为TRUE(包括任何资源)。
所以如果你执行以下操作:
$bool = (boolean)"False";
或者$test = "false";
$bool = settype($test, 'boolean');
在这两种情况下,$bool
都将是 TRUE
。所以你必须像GordonM建议的那样手动处理。
在处理JSON时,我需要通过 $_POST
发送一个布尔值。当我尝试执行以下操作时,遇到了类似的问题:
if ( $_POST['myVar'] == true) {
// do stuff;
}
json_decode()
函数对该字符串进行解码://assume that : $_POST['myVar'] = 'true';
if( json_decode('true') == true ) { //do your stuff; }
您可以使用json_decode函数来解码该布尔值
$string = 'false';
$boolean = json_decode($string);
if($boolean) {
// Do something
} else {
//Do something else
}
(boolean)json_decode(strtolower($string))
它处理了所有可能的变体:$string
'true' => true
'True' => true
'1' => true
'false' => false
'False' => false
'0' => false
'foo' => false
'' => false
on
和off
怎么样? - Cyclonecodeвкл
和 выкл
一样处理它。 - mrdedfilter_input()
过滤函数。$isSleeping = filter_input(INPUT_POST, 'is_sleeping', FILTER_VALIDATE_BOOLEAN);
如果您的“boolean”变量来自其他来源,您可以使用filter_var()
过滤函数。filter_var('true', FILTER_VALIDATE_BOOLEAN); // true
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。
$str = 'TRUE';
$boolean = strtolower($str) == 'true' ? true : false;
var_dump($boolean);
通过这种方式,您可以循环遍历一系列的 'true'、'TRUE'、'false' 或 'FALSE' 并将字符串值转换为布尔值。
$boolean = strtolower($str) == 'true';
来简化上述代码。 - Cyclonecode$boolString = 'false';
$result = 'true' === $boolString;
false
true
true
的别名,则filter_var($boolString, FILTER_VALIDATE_BOOLEAN);
仍然是更好的选项。
!!$string1
将返回一个布尔值,指示在最高评价答案中概述的字符串。 - David Barker