2013-05-29 11 views
14
$cartProducts = explode(',', $prodID); 
echo count($cartProducts) 

Wyjście var_dump ($ cartProducts); to:count (tablica) zwraca 1, ale tablica jest pusta

`array(1) { [0]=> string(0) "" } 

Daje mi to wartość $ count 1, ale tablica jest pusta lub przynajmniej moja kolumna z bazą danych jest pusta.

Próbowałem następujące:

if(empty($cartProducts)){ 
echo '0'; 
} else{ 
$count = count($cartProducts); 
} 

Ale pojawia się ten sam wynik: $ count = 1

Jezu, co ja tu brakuje?

+7

To nie jest pusta tablica; to tablica z jednym elementem - nawet jeśli ten element jest pustym łańcuchem, to nadal jest element –

+0

masz jeden element tablicy, ale jest pusty. Jak wygląda $ prodID? –

+0

Pokaż wartość $ prodID zanim zrobisz eksplodowanie() –

Odpowiedz

19

Można użyć array_filter():

echo count(array_filter($cartProducts, 'strlen')); 

Wykorzystuje strlen() zdecydować, czy element tablicy jest "pusta"; bez drugiego argumentu do array_filter będzie traktować także '0' jako puste.

Nawet lepiej

Korzystanie array_filter() jest dość rodzajowe; w przypadku, jeśli $prodID jest pusty ciąg znaków, byłoby lepiej, aby sprawdzić strlen($prodId) pierwszy, np .:

echo strlen($prodId) ? count(explode(',', $prodId)) : 0; 
+0

Niesamowite, dziękuję bardzo. działa świetny drugi argument nie jest wymagany w moim przykładzie. – Grant

+0

@Grant Lepiej być dokładnym :) druga część mojej odpowiedzi powinna ci lepiej służyć, chociaż imho. –

+0

Mam to, jeszcze raz, druga część odpowiedzi jest bardziej eleganckim rozwiązaniem. – Grant

7

Tablica nie jest pusta. Ma jeden element, który zawiera ciąg o długości 0.

count(array_filter($array)); 

Nie trzeba przechodzić drugi parametr do array_filter() bo pusty ciąg oceni false (a więc być usunięte).

+4

"pusty ciąg zostanie oceniony jako fałszywy" ...więc będzie "0", ale nie uznałbym tego za pusty ciąg. –

+1

+1 @jack very true –

0

Możesz użyć preg_split z flagą PREG_SPLIT_NO_EMPTY. W ten sposób nie będzie pustych strun:

$cartProducts = preg_split("/,/", $prodID, NULL, PREG_SPLIT_NO_EMPTY); 
1

można napisać kod tak:

$cartProducts = strlen($prodID) ? explode(",", $prodID) : array(); 
echo count($cartProducts); 
3

Twój if/else łapie złego zmienną. Należy przetestować $prodId:

if($prodID === ''){ 
    $count = 0; 
} else{ 
    $count = count(explode(',', $prodID)); 
} 

explode() gwarantuje powrót tablicę składającą się z ciągów, więc w zasadzie to działa tak samo jak reklamowane, co jest dobrą rzeczą.

+0

Ah tak, widzę to teraz. Dzięki wielkie. – Grant

Powiązane problemy