如何将string转换为布尔php
如何将string转换为boolean
?
$string = 'false'; $test_mode_mail = settype($string,'boolean'); var_dump($test_mode_mail); if($test_mode_mail) echo 'test mode is on.';
它返回,
布尔值true
但它应该是boolean false
。
string总是评估为布尔值true,除非它们的值被PHP认为是“空的”(取自empty
文档 ):
-
""
(一个空string); -
"0"
(0作为一个string)
如果您需要根据string的文本值设置布尔值,则需要检查该值的存在或其他值。
$test_mode_mail = $string === 'true'? true: false;
编辑:上面的代码旨在清晰的理解。 在实际使用中,下面的代码可能更合适:
$test_mode_mail = ($string === 'true');
这个方法是由@lauthiamkok在评论中发布的。 我把它张贴在这里作为一个答案,更多地关注它。
根据您的需要,您应该考虑使用filter_var()
和FILTER_VALIDATE_BOOLEAN
标志。
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( 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
string"false"
实际上被PHP视为"TRUE"
值。 该文件说:
要明确地将一个值转换为布尔值,可以使用(bool)或(boolean)强制转换。 但是,在大多数情况下,转换是不必要的,因为如果运算符,函数或控制结构需要布尔参数,则会自动转换值。
另请参见types杂耍。
转换为布尔值时,以下值被认为是FALSE:
布尔值FALSE本身
整数0(零)
浮点数0.0(零)
空string和string“0”
具有零元素的数组
具有零成员variables的对象(仅限PHP 4)
特殊types的NULL(包括未设置的variables)
由空标签创build的SimpleXML对象
其他每个值都被视为TRUE(包括任何资源)。
所以如果你这样做:
$bool = (boolean)"False";
要么
$test = "false"; $bool = settype($test, 'boolean');
在这两种情况下, $bool
将是TRUE
。 所以你必须手动完成,就像GordonM所build议的那样。
当使用Json时,我必须在$ _POST中发送一个布尔值。
当我做了类似的事情时,我遇到了类似的问题
if ($_POST['myVar'] == true) { // do stuff; }
当我的布尔由json变成刺痛。
为了克服这个问题,你可以使用json_decode()来解码string。 ;)
if( json_decode($_POST['myVar']) == true ) { //do your stuff; }
(这通常应该与bool值转换为string并通过其他方式发送到服务器,即使用json以外)
如果你觉得这个有用,请标记为答案,谢谢你,祝你有太阳,ciao
你可以使用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
最简单的事情是这样的:
$str = 'TRUE'; $boolean = strtolower($str) == 'true' ? true : false; var_dump($boolean);
这样做,你可以循环一系列'真','真','假'或'假',并获得一个布尔值的string值。
function stringToBool($string){ return ( mb_strtoupper( trim( $string)) === mb_strtoupper ("true")) ? TRUE : FALSE; }
要么
function stringToBool($string) { return filter_var($string, FILTER_VALIDATE_BOOLEAN); }
其他的答案是复杂的东西。 这个问题只是逻辑问题。 只要把你的陈述正确。
$boolString = 'false'; $result = 'true' === $boolString;
现在你的答案将是
-
false
,如果string是'false'
, - 或者如果你的string是
'true'
话就是'true'
。
我必须注意, filter_var( $boolString, FILTER_VALIDATE_BOOLEAN );
如果你需要像on/yes/1
这样的string作为别名, 那么它仍然是一个更好的select。
你也可以使用settype方法!
SetType($ var,“Boolean”)Echo $ var //参见0或1
我这样做会将任何不区分大小写的string“false”转换为布尔值FALSE,但是会对所有其他string使用普通的php转换规则。 我认为这是防止意外行为的最好方法。
$test_var = 'False'; $test_var = strtolower(trim($test_var)) == 'false' ? FALSE : $test_var; $result = (boolean) $test_var;
或者作为一个function:
function safeBool($test_var){ $test_var = strtolower(trim($test_var)) == 'false' ? FALSE : $test_var; return (boolean) $test_var; }
@GordonM的答案很好。 但是,如果$string
已经为true
(即,string不是一个string,但布尔真正),它会失败…这似乎是不合逻辑的。
扩展他的答案,我会使用:
$test_mode_mail = ($string === 'true' OR $string === true));
从php.net
public function strictBool($val=false){ return is_integer($val)?false:$val == 1; }
strval会做这个和更多。
看文档。 http://php.net/manual/en/function.strval.php
$my_istrue = true; echo 'hi '.strval($my_istrue); // returns "hi 1"
我感到困惑与wordpress短代码属性,我决定写一个自定义函数来处理所有的可能性。 也许这对某个人有用:
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']);
一个简单的方法是检查你认为是真值的数组。
$wannabebool = "false"; $isTrue = ["true",1,"yes","ok","wahr"]; $bool = in_array(strtolower($wannabebool),$isTrue);
你应该能够使用(布尔)强制转换为布尔值,但是我不确定是否对string“true”和“false”有效。
这可能是值得stream行的
$myBool = (bool)"False"; if ($myBool) { //do something }
值得一提的是,下面的内容将被置入布尔值False中
if()
- 布尔值FALSE本身
- 整数0(零)
- 浮点数0.0(零)
- 空string和string“0”
- 具有零元素的数组
- 具有零成员variables的对象(仅限PHP 4)
- 特殊types的NULL(包括未设置的variables)
- 由空标签创build的SimpleXML对象
其他每一个都会评估为真。
正如这里所描述的: http ://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting