2013-05-02 8 views
5

Jemand kann mir erklären, wenn dieses "Freak" Verhalten ist, was ich erwarten sollte.Seltsames PHP Verhalten: leer,!, Und zählen

Ich debbuging einige Code und bekam dies:

ich einige Ergebnis auf $ data Geting und diese erstellen, wenn Sie sicher sein, es ist $ data einige Informationen haben.

So:

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

Und aways in der, wenn Geting.

So mache ich einige var_dump zu sehen und wow.

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

gehen:

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

, wie Daten count = 1 und $ data = true und leer ($ data) = true?

Ich hoffe, ist keine dumme Frage, tut mir leid, wenn es ist.

+1

warum nicht 'var_dump ($ data)' so können wir sehen, was ist da? :) –

+0

Verwenden Sie nie 'count', um Zeichenketten zu validieren .... – Baba

+0

Meine Daten sind eine Rückkehr von fetchAll auf $ res, wie diese Rückstrom ($ res-> toArray()); – Guerra

Antwort

6

Graf die Anzahl der Elemente in var zurück. Wenn var kein Array oder Objekt mit implementierter Countable-Schnittstelle ist, wird 1 zurückgegeben. Es gibt eine Ausnahme, wenn var NULL ist, wird 0 zurückgegeben.

Blick auf PHP Dokumentation http://php.net/manual/en/function.count.php

8

Von der PHP Documentation on count.

Gibt die Anzahl der Elemente in var. Wenn var kein Array oder Objekt mit implementierter Countable-Schnittstelle ist, wird 1 zurückgegeben. Dort ist eine Ausnahme, wenn var NULL ist, wird 0 zurückgegeben.

wahrscheinlich die meisten, $data ist kein Array. Überprüfen Sie mit einem var_dump auf sie

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

Ihr Wert 0 oder eine leere Zeichenkette.

+0

Oder eine leere Zeichenfolge. Oder der Wert "0". – nickb

+0

Ihr Recht, count (null) ist eigentlich 0, also muss es einer der beiden sein, die Sie erwähnt haben – dave