2013-03-10 149 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」布爾值作爲結果。