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

Output di var_dump ($ cartProducts); è:count (array) restituisce 1 ma l'array è vuoto

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

Questo mi dà un valore di conteggio $ 1, ma la matrice è vuota, o almeno la mia colonna di database è vuoto.

Ho provato quanto segue:

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

ma ottengo lo stesso risultato: count = 1 $

Cavolo Che cosa mi manca qui?

+7

Questo non è un array vuoto; è un array con un elemento - anche se quell'elemento è una stringa vuota, è ancora un elemento –

+0

hai un elemento dell'array, ma è vuoto. Come appare $ prodID? –

+0

Mostra il valore di $ prodID prima dell'esplosione() –

risposta

19

Si potrebbe utilizzare array_filter():

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

utilizza strlen() per decidere se l'elemento array è "vuoto"; senza il secondo argomento a array_filter tratterebbe anche '0' come vuoto.

Ancora meglio

Utilizzando array_filter() è piuttosto generica; nel caso, se $prodID è una stringa vuota, sarebbe meglio controllare per primo strlen($prodId), es .:

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

Fantastico, grazie mille. funziona ottimo secondo argomento non richiesto nel mio esempio. – Grant

+0

@Grant È meglio essere esatti :) la seconda parte della mia risposta dovrebbe servire meglio se imho. –

+0

Capito, grazie ancora, la seconda parte della risposta è una soluzione più elegante. – Grant

7

La matrice non è vuoto. Ha un elemento che contiene una stringa che è lunga 0.

count(array_filter($array)); 

Non c'è bisogno di passare un secondo parametro di array_filter() perché una stringa vuota restituisce false (e quindi essere rimosso).

+4

"una stringa vuota valuterà come falso" ...così '' 0 '', ma non considererei una stringa vuota. –

+1

+1 @jack molto vero –

0

È possibile utilizzare preg_split con il flag PREG_SPLIT_NO_EMPTY. In questo modo non sarà possibile ottenere le stringhe vuote:

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

Si potrebbe scrivere il codice in questo modo:

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

tuo if/else cattura la variabile sbagliata. Si consiglia di verificare $prodId:

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

explode() è garantito per restituire una matrice costituita da stringhe, in modo sostanzialmente funziona proprio come pubblicizzato, che è una buona cosa.

+0

Ah sì, ora lo vedo. Grazie mille. – Grant

Problemi correlati