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

var_dump($ cartProducts)の出力; :count(配列)は1を返しますが、配列は空です。

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

これは、私に1のカウント値を与えますが、配列が空であるか、少なくともデータベースの列が空です。

私は次のことを試してみました:

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

をしかし、私は同じ結果を得る:$カウント= 1

うわあ、私はここで何をしないのですか?

+7

これは空の配列ではありません。 1つの要素を持つ配列です。たとえその要素が空の文字列であっても、まだ要素の1つです。 –

+0

1つの配列要素がありますが、空です。 $ prodIDはどのように見えますか? –

+0

explode()を実行する前に$ prodIDの値を表示 –

答えて

19

あなたはarray_filter()を使用することができます。

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

それは、配列要素が「空」であるかどうかを決定するためにstrlen()を使用しています。 2番目の引数がarray_filterにない場合、'0'も同様に処理されます。 array_filter()を使用して

さらに良い

はかなり一般的なもので、 $prodIDが空の文字列であれば、あなたの場合には、最初strlen($prodId)、例えばをチェックする方が良いだろう。:

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

素晴らしいです、本当にありがとうございます。私の例では必要ない素晴らしい第二引数を働かせます。 – Grant

+0

@Grantそれは正確である方が良いです:)私の答えの2番目の部分は、より良いあなたに役立つはずです。 –

+0

もう一度ありがとうございました。答えの2番目の部分はより洗練されたソリューションです。 – Grant

7

配列が空ではありません。それは、0の長さの文字列を含む1つの要素を持っています。

count(array_filter($array)); 

空の文字列がfalseと評価されます(したがって削除される)ので、あなたはarray_filter()に2つ目のパラメータを渡す必要はありません。

+4

"空の文字列はfalseと評価されます..."'' 0 ''のようになりますが、空の文字列ではありません。 –

+1

+1 @ジャック非常に真実 –

0

PREG_SPLIT_NO_EMPTYフラグを使用してpreg_splitを使用できます。そうすれば、あなたは空の文字列を取得することはありません。

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

あなたは、このようにコードを書くことができます:/他には間違った変数をキャッチした場合

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

あなた。あなたは$prodIdをテストする必要があります。

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

explode()は、文字列からなる配列を返すことが保証されているので、基本的にそれは良いことである、宣伝と同じように動作します。

+0

ああ、私は今それを見る。本当にありがとう。 – Grant

関連する問題