首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PHP中将字符串解析为布尔值

在PHP中将字符串解析为布尔值
EN

Stack Overflow用户
提问于 2011-01-24 01:38:49
回答 3查看 88.4K关注 0票数 138

今天我在玩PHP,我发现字符串值"true“和"false”在某个条件下不能正确解析为布尔值,例如,考虑以下函数:

代码语言:javascript
复制
function isBoolean($value) {
   if ($value) {
      return true;
   } else {
      return false;
   }
}

如果我执行:

代码语言:javascript
复制
isBoolean("true") // Returns true
isBoolean("") // Returns false
isBoolean("false") // Returns true, instead of false
isBoolean("asd") // Returns true, instead of false

它似乎只对"1“和"0”值起作用:

代码语言:javascript
复制
isBoolean("1") // Returns true
isBoolean("0") // Returns false

PHP中是否有一个本机函数可以将"true“和"false”字符串解析为布尔值?

EN

回答 3

Stack Overflow用户

发布于 2012-07-16 09:28:52

我最近需要一个“松散的”布尔转换函数来处理像您所询问的那样的字符串(以及其他事情)。I found a few different approaches and came up with a big set of test data to run through them。没有什么能完全满足我的需求,所以我写了自己的:

代码语言:javascript
复制
function loosely_cast_to_boolean($value) {
    if(is_array($value) || $value instanceof Countable) {
        return (boolean) count($value);
    } else if(is_string($value) || is_object($value) && method_exists($value, '__toString')) {
        $value = (string) $value;
        // see http://www.php.net/manual/en/filter.filters.validate.php#108218
        // see https://bugs.php.net/bug.php?id=49510
        $filtered = filter_var($value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
        if(!is_null($filtered)) {
            return $filtered;
        } else {
            // "none" gets special treatment to be consistent with ini file behavior.
            // see documentation in php.ini for more information, in part it says: 
            // "An empty string can be denoted by simply not writing anything after 
            // the equal sign, or by using the None keyword".
            if(strtolower($value) === 'none') {
                $value = '';
            }
            return (boolean) $value;
        }
    } else {
        return (boolean) $value;
    }
}

请注意,对于既是可计数的又是字符串可转换的对象,这将有利于计数而不是字符串值来确定真实性。也就是说,如果为$object instanceof Countable,则无论(string) $object的值是什么,它都将返回(boolean) count($object)

您可以看到我使用的测试数据的行为,以及其他几个函数here的结果。从这个小iframe中浏览结果有点困难,所以你可以使用view the script output in a full page (该URL没有文档记录,因此这可能不会永远有效)。以防这些链接在某一天消失,I put the code up on pastebin也是如此。

“应该是真的”和“不应该是真的”之间的界限是非常随意的;我使用的数据是根据我的需求和审美偏好进行分类的,你的可能会有所不同。

票数 4
EN

Stack Overflow用户

发布于 2011-01-24 01:50:19

我使用这个结构将字符串转换为布尔值,因为大多数其他值都需要true

代码语言:javascript
复制
$str = "true";
$bool = !in_array($str, array("false", "", "0", "no", "off"));
票数 3
EN

Stack Overflow用户

发布于 2013-03-28 23:17:35

安全转换为布尔值的最简单方法;

代码语言:javascript
复制
    $flag = 'true';

    if( filter_var( $flag,FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE ) !== null) {
      $flag = filter_var($flag,FILTER_VALIDATE_BOOLEAN);
    }

    gettype($flag); // Would Return 'Boolean'
    echo 'Val: '.$flag; // Would Output 'Val: 1'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4775294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档