如何将字符串转换为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

评论

为什么有人回答$ bool = !! $ string1?

@zloctb,因为它无法回答问题。 !! $ string1将返回一个布尔值,表示最高评价的答案中列出的字符串。

#1 楼

除非字符串具有被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'

– Znarkus
2011年9月7日下午16:00

我找到了-filter_var($ string,FILTER_VALIDATE_BOOLEAN);这是好事吗?

–laukok
2011年9月7日在16:05



三元似乎没有必要。为什么不将$ test_mode_mail设置为不等式的值呢? $ test_mode_mail = $ string ==='真'

–蒂姆银行
2012年6月5日15:28

但是1/0,正确/错误呢?我认为@lauthiamkok的答案是最好的。

–ryabenko-pro
2012-12-15 14:06



@FelipeTadeo我在谈论PHP如何根据布尔运算评估字符串,我从未提到过eval(),并且我绝不建议在任何情况下都使用它。 PHP将字符串“(3 <5)”评估为布尔值true,因为它不为空。

–GordonM
13年7月26日在8:06



#2 楼

该方法由@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


评论


根据文档,此功能可用于PHP 5> = 5.2.0。 php.net/manual/en/function.filter-var.php

–Westy92
2015年10月2日,下午2:49

我真的很喜欢这种基于WordPress短代码属性设置布尔值的解决方案,该属性具有诸如true,false,on,0等值。很好的答案,应该绝对是可接受的答案。

–安迪·沃伦(AndyWarren)
17年6月8日在17:49

filter_var($ answer,FILTER_VALIDATE_BOOLEAN,FILTER_NULL_ON_FAILURE)对我来说效果更好。参见php.net/manual/en/function.filter-var.php#121263

–瑞安
17年8月26日在19:42

!!重要的提示 !!如果过滤器失败,filter_var也返回FALSE。这可能会产生一些问题。

– AFA Med
17-10-4在10:30

#3 楼

PHP实际上将字符串"false"视为"TRUE"值。
文档中说:


要显式将值转换为布尔值,请使用(bool)或(boolean)< br演员。但是,在大多数情况下,强制转换是不必要的,因为如果运算符,函数或控件
结构需要布尔参数,则值
将自动转换。

另请参见类型杂耍。

转换为布尔值时,以下值被视为FALSE:


布尔值FALSE本身
整数0(零)
浮点数0.0(零)
空字符串,字符串“ 0”
元素为零的数组
成员变量为零的对象(仅PHP 4)
特殊类型NULL(包括未设置的变量)
从空标签创建的SimpleXML对象

其他所有值都被视为TRUE(包括任何资源)。


因此,如果您这样做:

$bool = (boolean)"False";




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


两种情况下$bool均为TRUE。因此,您必须像GordonM建议的那样手动进行操作。

评论


Euhm,当然,较低的那个返回false。实际上,它引发了致命错误:)“致命错误:只能通过引用传递变量”。 $ a ='假'; settype($ a,'boolean'); var_dump($ a);确实会返回false。

–Rob
16-10-24在6:55

#4 楼

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

#5 楼

您可以使用json_decode对该布尔值进行解码

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


评论


如果给定的字符串是整数,则json_decode也将转​​换为整数

– MihaiRăducanu
16年8月16日在13:53

是的,是的,但是它提到字符串包含布尔值

– souparno果酱
16年8月16日在14:13

#6 楼

(boolean)json_decode(strtolower($string))


可处理$string的所有可能变体

'true'  => true
'True'  => true
'1'     => true
'false' => false
'False' => false
'0'     => false
'foo'   => false
''      => false


评论


那断断续续呢?

–Cyclonecode
18年3月21日在16:56

@Cyclonecode不会像вкл和выкл一样处理它。

–混合
20 Sep 25'9:55

#7 楼

如果“布尔”变量来自$ _POST和$ _GET之类的全局数组,则可以使用filter_input()过滤器函数。

POST的示例:

$isSleeping  = filter_input(INPUT_POST, 'is_sleeping',  FILTER_VALIDATE_BOOLEAN);


如果“布尔”变量来自其他来源,则可以使用filter_var()过滤器功能。

示例:

filter_var('true', FILTER_VALIDATE_BOOLEAN); // true


#8 楼

您可以使用boolval($strValue)

示例:

<?php
echo '0:        '.(boolval(0) ? 'true' : 'false')."\n";
echo '42:       '.(boolval(42) ? 'true' : 'false')."\n";
echo '0.0:      '.(boolval(0.0) ? 'true' : 'false')."\n";
echo '4.2:      '.(boolval(4.2) ? 'true' : 'false')."\n";
echo '"":       '.(boolval("") ? 'true' : 'false')."\n";
echo '"string": '.(boolval("string") ? 'true' : 'false')."\n";
echo '"0":      '.(boolval("0") ? 'true' : 'false')."\n";
echo '"1":      '.(boolval("1") ? 'true' : 'false')."\n";
echo '[1, 2]:   '.(boolval([1, 2]) ? 'true' : 'false')."\n";
echo '[]:       '.(boolval([]) ? 'true' : 'false')."\n";
echo 'stdClass: '.(boolval(new stdClass) ? 'true' : 'false')."\n";
?>


文档
http://php.net/manual/es/function。 boolval.php

评论


回声boolval('false'); => 1

– Mubashar
19年6月3日在5:37

您可以使用echo(int)'false;或echo intval('false');

–anayarojo
19年6月3日在22:59



@anayarojo(int)'true'和intval('true')都同样返回0(所有字符串都可以)

–sketchyTech
19-09-2在12:59



#9 楼

最简单的方法是:

$str = 'TRUE';

$boolean = strtolower($str) == 'true' ? true : false;

var_dump($boolean);


以这种方式进行操作,您可以循环浏览“ true”,“ TRUE”,“ false”或“ FALSE”,并将字符串值转换为布尔值。

评论


您可以通过执行$ boolean = strtolower($ str)=='true'使上面的操作更简单;

–Cyclonecode
20-09-28在22:47

#10 楼

其他答案是使事情复杂化。这个问题仅仅是逻辑问题。只要正确声明即可。

$boolString = 'false';
$result = 'true' === $boolString;


现在,如果字符串为




false如果您的字符串是'false',则为true
'true'

我必须指出,如果您需要使用像filter_var( $boolString, FILTER_VALIDATE_BOOLEAN );这样的字符串作为on/yes/1的别名,那么true仍然是更好的选择。 br />

#11 楼

function stringToBool($string){
    return ( mb_strtoupper( trim( $string)) === mb_strtoupper ("true")) ? TRUE : FALSE;
}




function stringToBool($string) {
    return filter_var($string, FILTER_VALIDATE_BOOLEAN);
}


#12 楼

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。

#13 楼

您也可以使用settype方法!

SetType($ var,“ Boolean”)
Echo $ var //请参见0或1

#14 楼

我这样做的方式是将字符串“ false”的任何不区分大小写的版本都转换为布尔值FALSE,但对于所有其他字符串,将使用常规的php转换规则进行操作。我认为这是防止意外行为的最佳方法。

或作为功能:

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


#15 楼

@GordonM的答案是好的。
但是如果$string已经是true(即字符串不是字符串,而是布尔TRUE),它将失败。...似乎不合逻辑。

扩展他的答案,我会使用:

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


#16 楼

我对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']);
 


评论


我最初是在寻求帮助,但没有找到我所希望的那么容易。这就是为什么我编写了自己的函数。随意使用它。

– tomi
16年4月5日在18:02

也许将字符串降低到不需要所有or条件$ str = strtolower($ str); return($ str =='true'|| $ str =='on');

–Cyclonecode
20-09-28在22:44

#17 楼

一种简单的方法是检查您认为正确的值数组。

$wannabebool = "false";
$isTrue = ["true",1,"yes","ok","wahr"];
$bool = in_array(strtolower($wannabebool),$isTrue);


#18 楼

编辑以显示此处未提及的可能性,因为我的原始答案与OP的问题相去甚远。

preg_match();可以使用。但是,在大多数应用中,使用它比这里的其他答案要重得多。

if (preg_match("/true/i", "true PHP is a web scripting language of choice.")) {
    echo "<br><br>Returned true";
} else {
    echo "<br><br>Returned False";
}


/(?:true)|(?:1)/i如果在某些情况下需要,也可以使用。计算包含“ false”和“ 1”的字符串时,它将无法正确返回。

评论


这不是要问的。问题是如何将字符串转换为布尔值。

–混合
17年6月20日在10:39

默德:我看错了我道歉的问题。因此,本着良好的精神,我将添加此处未提及的另一种可能性。

–JSG
19年7月21日在19:53

#19 楼

在PHP中,您只需使用double not运算符(!!)即可将值转换为布尔值:

评论


使用此选项,“ false”字符串将最终为布尔值true。

–吴彦祖
20年7月1日,下午3:47

#20 楼

您应该可以使用(bool)强制转换为布尔值,但是我不确定是否不检查它是否对字符串“ true”和“ false”有效。

这可能值得流行

$myBool = (bool)"False"; 

if ($myBool) {
    //do something
}


值得一提的是,将以下内容放入布尔值False时,将其放入

if()



布尔FALSE本身
整数0(零)
浮点数0.0(零)
空字符串和字符串“ 0”
具有零的数组elements
成员变量为零的对象(仅适用于PHP 4)
特殊类型NULL(包括未设置的变量)
从空标记创建的SimpleXML对象

评估为true。

如此处所述:
http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

评论


针对您在第一段中的猜测:将显式强制转换为布尔值会将“ false”转换为true。

–马克·阿默里(Mark Amery)
13年3月13日在10:29

这将打印“ true” $ myBool =(bool)“ False”;如果($ myBool){echo“ true”; }

–SSH此
13年4月22日在18:28

这是错误的,除非字符串包含“”或“ 0”,否则它们将被评估为true。

–迈克尔·J·卡尔金斯(Michael J. Calkins)
13年5月25日在17:19