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

时间:2011-09-07 15:54:27

标签: 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.';

它返回,

  

布尔值为真

但它应该是boolean false

22 个答案:

答案 0 :(得分:565)

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

答案 1 :(得分:291)

字符串总是计算为布尔值true,除非它们的值被PHP视为“空”(取自documentation for empty):

  1. ""(空字符串);
  2. "0"(0为字符串)
  3. 如果需要根据字符串的文本值设置布尔值,则需要检查该值是否存在。

    $test_mode_mail = $string === 'true'? true: false;
    

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

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

答案 2 :(得分:31)

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

  

要将值显式转换为boolean,请使用(bool)或(boolean)   管型。但是,在大多数情况下,演员是不必要的,因为一个值   如果是操作员,功能或控制,将自动转换   结构需要一个布尔参数。

     

另见Type Juggling。

     

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

     
      
  • 布尔值FALSE本身

  •   
  • 整数0(零)

  •   
  • 浮点数0.0(零)

  •   
  • 空字符串,字符串“0”

  •   
  • 零元素数组

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

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

  •   
  • 从空标签创建的SimpleXML对象

  •   
     

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

所以,如果你这样做:

$bool = (boolean)"False";

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

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

答案 3 :(得分:16)

使用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以外的其他方式。)

答案 4 :(得分:11)

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

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

答案 5 :(得分:7)

(boolean)json_decode(strtolower($string))

它处理$string

的所有可能变体
'true'  => true
'True'  => true
'1'     => true
'false' => false
'False' => false
'0'     => false
'foo'   => false
''      => false

答案 6 :(得分:4)

您可以使用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

答案 7 :(得分:4)

最简单的事情就是:

$str = 'TRUE';

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

var_dump($boolean);

这样做,你可以遍历一系列'true','TRUE','false'或'FALSE',并将字符串值转换为布尔值。

答案 8 :(得分:3)

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。

答案 9 :(得分:3)

其他答案过于复杂。这个问题只是逻辑问题。只是说出你的陈述。

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

现在你的回答是

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

我必须注意,filter_var( $boolString, FILTER_VALIDATE_BOOLEAN );仍然是更好的选择如果您需要将on/yes/1之类的字符串作为true的别名。

答案 10 :(得分:3)

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

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

答案 11 :(得分:3)

如果你的&#34;布尔&#34;变量来自全局数组,如$ _POST和$ _GET,您可以使用filter_input()过滤函数。

POST示例:

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

如果你的&#34;布尔&#34;变量来自其他来源,您可以使用filter_var()过滤函数。

示例:

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

答案 12 :(得分:2)

您也可以使用settype方法!

的setType($变种,&#34;布尔&#34) Echo $ var //见0或1

答案 13 :(得分:2)

@GordonM 的答案很好。 但如果$string已经true(即字符串不是字符串但是布尔值为TRUE),则会失败...这似乎不合逻辑。

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

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

答案 14 :(得分:2)

我这样做会将字符串“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;
}

答案 15 :(得分: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']);

答案 16 :(得分:0)

strval将会这样做以及更多。

查看文档。 http://php.net/manual/en/function.strval.php

  $my_istrue = true;
  echo 'hi '.strval($my_istrue); // returns "hi 1"

答案 17 :(得分:0)

嗯,我遇到了这样的问题,我以简单的方式做到了,它可以正常工作

$npm install -g appium
npm WARN deprecated fsevents@2.0.1: Not Ready For Production
/Users/infotmt/bin/appium -> /Users/infotmt/lib/node_modules/appium/build/lib/main.js

> appium-chromedriver@4.9.0 install /Users/infotmt/lib/node_modules/appium/node_modules/appium-chromedriver
> node install-npm.js

[18:22:48] [Chromedriver Install] Installing Chromedriver version '2.44' for platform 'mac' and architecture '64'
[18:22:48] [Chromedriver Install] Opening temp file to write 'chromedriver_mac64' to...
[18:22:48] [Chromedriver Install] Opened temp file '/var/folders/ng/_2f_j78n1vg4gf8xnxvx9c780000gn/T/2019025-62054-1018qcf.8dtn/chromedriver_mac64.zip'
[18:22:48] [Chromedriver Install] Downloading https://chromedriver.storage.googleapis.com/2.44/chromedriver_mac64.zip...
[18:22:52] [Chromedriver Install] Writing binary content to /var/folders/ng/_2f_j78n1vg4gf8xnxvx9c780000gn/T/2019025-62054-1018qcf.8dtn/chromedriver_mac64.zip...
[18:22:52] [Chromedriver Install] Extracting /var/folders/ng/_2f_j78n1vg4gf8xnxvx9c780000gn/T/2019025-62054-1018qcf.8dtn/chromedriver_mac64.zip to /var/folders/ng/_2f_j78n1vg4gf8xnxvx9c780000gn/T/2019025-62054-1018qcf.8dtn/chromedriver_mac64
[18:22:52] [Chromedriver Install] Creating /Users/infotmt/lib/node_modules/appium/node_modules/appium-chromedriver/chromedriver/mac...
[18:22:52] [Chromedriver Install] Copying unzipped binary, reading from /var/folders/ng/_2f_j78n1vg4gf8xnxvx9c780000gn/T/2019025-62054-1018qcf.8dtn/chromedriver_mac64/chromedriver...
[18:22:52] [Chromedriver Install] Writing to /Users/infotmt/lib/node_modules/appium/node_modules/appium-chromedriver/chromedriver/mac/chromedriver...
[18:22:52] [Chromedriver Install] /Users/infotmt/lib/node_modules/appium/node_modules/appium-chromedriver/chromedriver/mac/chromedriver successfully put in place

> appium-selendroid-driver@1.13.2 install /Users/infotmt/lib/node_modules/appium/node_modules/appium-selendroid-driver
> node ./bin/install.js

[18:22:54] Java version 1.8.0_202 found
[18:22:55] Ensuring /Users/infotmt/lib/node_modules/appium/node_modules/appium-selendroid-driver/selendroid/download exists
[18:22:55] Downloading Selendroid standalone server version 0.17.0 from https://repo1.maven.org/maven2/io/selendroid/selendroid-standalone/0.17.0/selendroid-standalone-0.17.0-with-dependencies.jar --> /Users/infotmt/lib/node_modules/appium/node_modules/appium-selendroid-driver/selendroid/download/selendroid-server-7cf7163ac47f1c46eff95b62f78b58c1dabdec534acc6632da3784739f6e9d82.jar
[18:23:07] Writing binary content to /Users/infotmt/lib/node_modules/appium/node_modules/appium-selendroid-driver/selendroid/download/selendroid-server.jar.tmp
[18:23:07] Selendroid standalone server downloaded
[18:23:07] Determining AndroidManifest location
[18:23:07] Determining server apk location
[18:23:07] Extracting manifest and apk to /Users/infotmt/lib/node_modules/appium/node_modules/appium-selendroid-driver/selendroid/download
[18:23:07] Copying manifest and apk to /Users/infotmt/lib/node_modules/appium/node_modules/appium-selendroid-driver/selendroid
[18:23:07] Cleaning up temp files
[18:23:07] Fixing AndroidManifest icon bug

> appium-windows-driver@1.5.1 install /Users/infotmt/lib/node_modules/appium/node_modules/appium-windows-driver
> node install-npm.js

Not installing WinAppDriver since did not detect a Windows system

> fsevents@2.0.1 install /Users/infotmt/lib/node_modules/appium/node_modules/fsevents
> [ -f fsevents.node ] || npm run prepare


> heapdump@0.3.12 install /Users/infotmt/lib/node_modules/appium/node_modules/heapdump
> node-gyp rebuild

  CXX(target) Release/obj.target/addon/src/heapdump.o
In file included from ../src/heapdump.cc:17:
../../nan/nan.h:1064:44: warning: 'ToString' is deprecated: Use maybe version
      [-Wdeprecated-declarations]
      v8::Local<v8::String> string = from->ToString(v8::Isolate::GetCurrent());
                                           ^
/Users/infotmt/.node-gyp/11.7.0/include/node/v8.h:2537:3: note: 'ToString' has
      been explicitly marked deprecated here
  V8_DEPRECATED("Use maybe version",
  ^
/Users/infotmt/.node-gyp/11.7.0/include/node/v8config.h:326:29: note: expanded
      from macro 'V8_DEPRECATED'
  declarator __attribute__((deprecated(message)))
                            ^
1 warning generated.
  SOLINK_MODULE(target) Release/addon.node
+ appium@1.10.1
added 493 packages from 406 contributors and updated 2 packages in 34.024s

答案 18 :(得分:0)

我正在使用以下方法:

$test = "true";

$test == 'false' ? $test = false : $test = true;

echo  $test;

if(empty($test)){
    echo "IT IS FALSE";
}

if($test){
     echo "IT IS TRUE";
}

答案 19 :(得分:-1)

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

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

答案 20 :(得分:-1)

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

var_dump(!! true);     // true
var_dump(!! "Hello");  // true
var_dump(!! 1);        // true
var_dump(!! [1, 2]);   // true
var_dump(!! false);    // false
var_dump(!! null);     // false
var_dump(!! []);       // false
var_dump(!! 0);        // false
var_dump(!! '');       // false

答案 21 :(得分:-4)

你应该能够使用(bool)强制转换为布尔值,但我不确定是否在字符串“true”和“false”上进行检查。

这可能值得流行

$myBool = (bool)"False"; 

if ($myBool) {
    //do something
}

值得一提的是,当放入

时,以下内容将评估为布尔值False
if()
  • 布尔值FALSE本身
  • 整数0(零)
  • 浮点数0.0(零)
  • 空字符串,字符串“0”
  • 包含零元素的数组
  • 一个零成员变量的对象(仅限PHP 4)
  • 特殊类型NULL(包括未设置的变量)
  • 从空标签创建的SimpleXML对象

其他人将评估为真。

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