2013-05-02 55 views
5

有人可以向我解釋這個「怪胎」行爲是我應該期待的。奇怪的PHP行爲:空,!和數

我debbuging一些代碼,並得到這個:

我在歌廳$數據的一些結果,並創建這個如果要確保它的$數據有一些信息。

所以:

if(!$data || empty($data) || count($data) == 0) 

而且跳投歌廳的如果。

所以我做了一些var_dump來看看和哇。

var_dump(!$data , empty($data) , count($data)); 

走這!

bool(true) 
bool(true) 
int(1) 

怎麼算數據= 1和$數據=真空($數據)=真?

我希望不是愚蠢的問題,我很抱歉,如果是。

+1

爲什麼不''var_dump($ data)'所以我們可以看到有什麼? :) – 2013-05-02 20:30:07

+0

千萬不要使用'count'來驗證字符串.... – Baba 2013-05-02 20:32:12

+0

我的數據是從$ res上的fetchAll返回的,就像這樣返回當前數據($ res-> toArray()); – Guerra 2013-05-02 20:34:18

回答

6

計數返回VAR元素的數量。如果var不是一個數組或實現了Countable接口的對象,則返回1。有一個例外,如果var爲NULL,則返回0。

看看PHP文檔http://php.net/manual/en/function.count.php

8

來自PHP Documentation on count

返回var中元素的個數。如果var不是一個數組或具有已實現的可數接口的對象,則將返回1。有 是一個例外,如果var爲NULL,則返回0。

最有可能的是,$data不是一個數組。仔細檢查了的var_dump它

var_dump($data) 
-1
!0 = true; 
empty(0) = true; 
count(0) = 1 

你的值爲0或空字符串。

+0

或者一個空字符串。或值'0'。 – nickb 2013-05-02 20:32:47

+0

你的權利,count(null)實際上是0,所以它必須是你提到的兩個之一 – dave 2013-05-02 20:34:57