如何将字符串转换为布尔值php

lau*_*kok 293 php string casting boolean

如何将字符串转换为boolean

$string = 'false';

$test_mode_mail = settype($string, 'boolean');

var_dump($test_mode_mail);

if($test_mode_mail) echo 'test mode is on.';
Run Code Online (Sandbox Code Playgroud)

它回来了,

布尔值为true

但它应该是boolean false.

Bra*_*rad 611

这个方法由@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
Run Code Online (Sandbox Code Playgroud)

  • `filter_var($ answer,FILTER_VALIDATE_BOOLEAN,FILTER_NULL_ON_FAILURE)`对我来说效果更好.见http://php.net/manual/en/function.filter-var.php#121263 (9认同)
  • 根据文档,此函数适用于PHP 5> = 5.2.0.http://php.net/manual/en/function.filter-var.php (5认同)
  • 我真的很喜欢这个基于WordPress短代码属性设置布尔值的解决方案,这些属性具有诸如true,false,on,0等值.很棒的答案,绝对应该是接受的答案. (3认同)
  • !! 重要的提示 !!如果过滤器失败,filter_var 也会返回 FALSE。这可能会产生一些问题。 (2认同)

Gor*_*onM 314

字符串总是评估为布尔值true,除非它们具有被PHP认为是"空"的值(取自文档empty):

  1. "" (空字符串);
  2. "0" (0作为字符串)

如果需要根据字符串的文本值设置布尔值,则需要检查该值是否存在.

$test_mode_mail = $string === 'true'? true: false;
Run Code Online (Sandbox Code Playgroud)

编辑:上述代码旨在清楚理解.在实际使用中,以下代码可能更合适:

$test_mode_mail = ($string === 'true');
Run Code Online (Sandbox Code Playgroud)

  • 我发现了这个 - "filter_var($ string,FILTER_VALIDATE_BOOLEAN);`这是件好事吗? (231认同)
  • 三元似乎没有必要.为什么不将$ test_mode_mail设置为不等式的值?$ test_mode_mail = $ string ==='true' (10认同)
  • 如果你不确定你在做什么,我建议总是使用严格的比较:`$ string ==='true'` (4认同)
  • 但是1/0,TRUE/FALSE怎么样?我认为@lauthiamkok的答案是最好的. (3认同)
  • @FelipeTadeo 我在谈论 PHP 如何评估与布尔运算有关的字符串,我从未提到 eval() 并且我从不建议在任何情况下使用它。字符串 "(3 < 5)" 将被 PHP 评估为布尔值 true,因为它不为空。 (2认同)

wos*_*sis 34

"false" 实际上,String 被"TRUE"PHP 视为值.文件说:

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

另见Type Juggling.

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

  • 布尔值FALSE本身

  • 整数0(零)

  • 浮点数0.0(零)

  • 空字符串,字符串"0"

  • 一个零元素的数组

  • 一个零成员变量的对象(仅限PHP 4)

  • 特殊类型NULL(包括未设置的变量)

  • 从空标签创建的SimpleXML对象

每个其他值都被视为TRUE(包括任何资源).

所以,如果你这样做:

$bool = (boolean)"False";
Run Code Online (Sandbox Code Playgroud)

要么

$test = "false";
$bool = settype($test, 'boolean');
Run Code Online (Sandbox Code Playgroud)

在这两种情况下$bool都会TRUE.所以你必须手动完成,就像GordonM建议的那样.


Nis*_*aan 16

使用JSON时,我必须通过发送布尔值$_POST.当我做了类似的事情时,我遇到了类似的问题:

if ( $_POST['myVar'] == true) {
    // do stuff;
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我的布尔值被转换为JSON字符串.

要解决此问题,您可以使用json_decode()以下方法解码字符串:

//assume that : $_POST['myVar'] = 'true';
 if( json_decode('true') == true ) { //do your stuff; }
Run Code Online (Sandbox Code Playgroud)

(这通常应该使用转换为字符串的布尔值并通过其他方式发送到服务器,即使用JSON以外的其他方式.)


sou*_*der 11

你可以使用json_decode来解码那个布尔值

$string = 'false';
$boolean = json_decode($string);
if($boolean) {
  // Do something
} else {
  //Do something else
}
Run Code Online (Sandbox Code Playgroud)


San*_*ues 9

如果你的“boolean”变量来自一个全局数组,比如 $_POST 和 $_GET,你可以使用filter_input()filter 函数。

POST 示例:

$isSleeping  = filter_input(INPUT_POST, 'is_sleeping',  FILTER_VALIDATE_BOOLEAN);
Run Code Online (Sandbox Code Playgroud)

如果您的“boolean”变量来自其他来源,您可以使用filter_var()过滤功能。

例子:

filter_var('true', FILTER_VALIDATE_BOOLEAN); // true
Run Code Online (Sandbox Code Playgroud)


小智 9

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 = ''; // false
$string = 'sgffgfdg'; // null
Run Code Online (Sandbox Code Playgroud)

您必须指定

FILTER_NULL_ON_FAILURE
否则,即使 $string 包含其他内容,你也将始终为 false。


mrd*_*ded 8

(boolean)json_decode(strtolower($string))
Run Code Online (Sandbox Code Playgroud)

它处理所有可能的变种 $string

'true'  => true
'True'  => true
'1'     => true
'false' => false
'False' => false
'0'     => false
'foo'   => false
''      => false
Run Code Online (Sandbox Code Playgroud)

  • “开”和“关”怎么样? (2认同)

ana*_*ojo 6

您可以使用 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";
?>
Run Code Online (Sandbox Code Playgroud)

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

  • `echo boolval('false');` =&gt; 1 (3认同)

小智 5

最简单的事情是这样的:

$str = 'TRUE';

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

var_dump($boolean);
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以循环一系列“true”、“TRUE”、“false”或“FALSE”并将字符串值获取为布尔值。

  • 您可以通过执行 `$boolean = strtolower($str) == 'true';` 使上面的内容变得更简单。 (2认同)