为啥 count(false) 返回 1?

Posted

技术标签:

【中文标题】为啥 count(false) 返回 1?【英文标题】:Why count(false) return 1?为什么 count(false) 返回 1? 【发布时间】:2013-02-25 23:24:59 【问题描述】:

你知道为什么<?= count(false) ?> 返回1吗?

【问题讨论】:

count of false gives 1 and if of an empty array gives false. why? 的可能重复项 【参考方案1】:

这是指定的行为:

如果 var 不是数组或实现了 Countable 的对象 接口,返回1。

根据http://php.net/manual/en/function.count.php

【讨论】:

...你领先我 5 秒,所以我就给你 +1 如果没有数组,如何从count中取0?? @Ritesh $count = $var != false ? count($var) : 0; 怎么样?【参考方案2】:

因为false也是一个值,如果count()没有得到数组而是一个有效的变量,它返回true,即1

$result = count(null);
// $result == 0

$result = count(false);
// $result == 1

【讨论】:

“随机”评论:就像 if(0) 返回 false 而 if(-1) 返回 true。 你已经接近了:它不会返回 truecount 期待一个数组,如果 var 不是一个数组,它就会被转换成一个数组。由于false 是一个有效值,它被强制转换为一个包含一个元素的数组:一个值为false 的元素。 justinsomnia.org/2007/12/in-php-countfalse-returns-1【参考方案3】:

记住这一点的好方法:

count(false) 基本同: count(“一个布尔值”),因此结果是“一个”布尔值。

【讨论】:

【参考方案4】:

在我看来,PHP 正在阻止人们使用count() 来确定元素是数组还是对象。他们有专门的函数(is_array()is_object()),天真地使用count() 并检查false 条件来确定数组或对象可能很诱人。相反,PHP 使非对象、非数组返回 1(这是真实的),因此不能以这种方式天真地使用此方法(因为 0 是空数组/对象的有效、虚假结果) .

这可能是在您描述的情况下选择函数返回值的原因。

【讨论】:

他不是在尝试确定它是数组还是对象,而是在尝试确定数组的长度并质疑为什么一个 0 记录或不存在的数组仍然返回 1。

以上是关于为啥 count(false) 返回 1?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 PHP (-1 > false) 中返回 true? [复制]

为啥“解释”返回的行不等于count()?

为啥“解释”返回的行不等于count()?

为啥 List.contain 返回 false [重复]

为啥 OleDb ExecuteScalar 方法在查询 COUNT 时返回 Decimal?

python:下面这个语句返回值为啥是False: