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
。#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
评论
为什么有人回答$ bool = !! $ string1?@zloctb,因为它无法回答问题。 !! $ string1将返回一个布尔值,表示最高评价的答案中列出的字符串。