如何将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文档 ):

  1. "" (一个空string);
  2. "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