2013-03-10 152 views
14

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

+0

[count of false given 1 and if of a empty array gives false。为什么?](http://stackoverflow.com/questions/3776882/count-of-false-gives-1-and-if-of-an-empty-array-gives-false-why) – mario 2013-03-10 21:20:06

回答

22

它指定的行为:

如果变种是不是数组或实现可列 接口的对象,1将被返回。

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

+3

...你打了我5秒,所以我会给你+1 – Daedalus 2013-03-10 21:00:43

+0

如何从0如果没有数组? – Ritesh 2014-01-03 11:11:01

+0

@Ritesh怎么样'$ count = $ var!= false?计数($ var):0;'? – aesede 2016-04-21 21:37:14

8

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

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

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

“随机”评论:这就像如果(0)返回false并且如果(-1)返回true。 – 2013-03-10 21:17:43

+0

你近了:它不会返回'true'。 'count'需要一个数组,如果'var'不是一个,它会被转换成一个数组。由于'false'是一个有效的值,因此它会被转换为一个元素的数组:一个值为“false”的元素。 http://justinsomnia.org/2007/12/in-php-countfalse-returns-1/ – 2013-03-13 17:34:29

1

它看起来对我来说,PHP是防止从使用count(),以确定是否一个元素是一个数组或一个对象之一。他们有专门的功能(is_array(),is_object()),它可能会诱惑天真地使用count()并检查false条件来确定数组或对象。相反,PHP使非对象,非数组返回1(这是truthy),以便这种方法不能以这种方式天真地使用(因为0是一个空的数组/对象的有效,虚假的结果)。

这可能是为什么在你描述的情况下,函数返回值的原因。

+0

他没有试图确定它是一个数组还是对象,他试图确定数组的长度,并质疑为什么0记录或不存在的数组仍然返回1。 – jerebear 2017-09-22 05:10:42

1

一个很好的方式,在你的心中记住这一点:

  • 计数(假的)基本上是一样的:
  • 计数(“一个布尔值”),因此有“ONE”布尔值作为结果。