为啥 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。 你已经接近了:它不会返回true
。 count
期待一个数组,如果 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? [复制]