如何将字符串转换为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
。
!!$string1
会返回一个布尔值,该布尔值表示评分最高的答案中列出的字符串。
如何将字符串转换为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
。
!!$string1
会返回一个布尔值,该布尔值表示评分最高的答案中列出的字符串。
Answers:
除非字符串的值被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
覆盖整个范围的值,包括truthy值"true"
,"1"
,"yes"
和"on"
。有关更多详细信息,请参见此处。
$string === 'true'
filter_var($string, FILTER_VALIDATE_BOOLEAN);
这是一件好事吗?
该方法由@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)
为我工作得更好。参见php.net/manual/en/function.filter-var.php#121263
"false"
实际上"TRUE"
,PHP 将该字符串视为一个值。该文档说:
要将值显式转换为布尔值,请使用(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字符串。
为了克服这个问题,您可以使用解码字符串json_decode()
:
//assume that : $_POST['myVar'] = 'true';
if( json_decode('true') == true ) { //do your stuff; }
(这通常应将布尔值转换为字符串并通过其他方式(例如,使用JSON以外的方式)发送到服务器。)
您可以使用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
?
您可以使用 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";
?>
echo boolval('false');
=> 1
echo (int)'false;
或echo intval('false');
(int)'true'
和intval('true')
都返回0,以及(所有字符串做)
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。
我这样做的方式是将字符串“ false”的任何不区分大小写的版本都转换为布尔值FALSE,但对于所有其他字符串,将使用常规的php转换规则进行操作。我认为这是防止意外行为的最佳方法。
$test_var = 'False';
$test_var = strtolower(trim($test_var)) == 'false' ? FALSE : $test_var;
$result = (boolean) $test_var;
或作为功能:
function safeBool($test_var){
$test_var = strtolower(trim($test_var)) == 'false' ? FALSE : $test_var;
return (boolean) $test_var;
}
我对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']);
编辑以显示此处未提及的可能性,因为我的原始答案与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”的字符串时,它将无法正确返回。
您应该可以使用(bool)强制转换为布尔值,但是我不确定如果不检查这是否适用于字符串“ true”和“ false”。
虽然这可能值得流行
$myBool = (bool)"False";
if ($myBool) {
//do something
}
值得一提的是,将以下内容放入布尔值False
if()
其他一切将评估为真。
如此处所述:http ://www.php.net/manual/zh/language.types.boolean.php#language.types.boolean.casting
"false"
为true
。
$myBool = (bool)"False"; if ($myBool) { echo "true"; }