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

var_dump($ cartProducts);的輸出。是:count(array)返回1,但數組爲空

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

這給我$ count值爲1,但數組是空的,或至少我的數據庫列是空的。

我曾嘗試以下:

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

,但我得到了相同的結果:$計數= 1

哎呀我缺少什麼嗎?

+7

這不是一個空數組;它是一個具有一個元素的數組 - 即使該元素是一個空字符串,它仍然是一個元素 –

+0

您有一個數組元素,但它是空的。 $ prodID的外觀如何? –

+0

在執行爆炸之前顯示$ prodID的值() –

回答

19

你可以使用array_filter()

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

它使用strlen()決定數組元素是否爲 「空」;如果沒有array_filter的第二個參數,它會將'0'視爲空。

更妙

使用array_filter()是非常通用的;你的情況,如果$prodID是一個空字符串,倒不如檢查strlen($prodId)第一,例如:

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

太棒了,非常感謝。在我的例子中不需要很好的第二個參數。 – Grant

+0

@Grant最好是確切的:)我的答案的第二部分應該爲你服務,儘管imho。 –

+0

知道了,再次感謝您的答案的第二部分是一個更優雅的解決方案。 – Grant

7

的數組不爲空。它有一個包含長度爲0的字符串的元素。

count(array_filter($array)); 

你並不需要第二個參數傳遞給array_filter()因爲一個空字符串將計算爲假(因此被移除)。

+4

「空字符串將評估爲false」...所以將''0'',但我不會認爲這是一個空字符串。 –

+1

+1 @jack非常真實 –

0

您可以使用preg_splitPREG_SPLIT_NO_EMPTY標誌。這樣,你不會得到空字符串:

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

你可以編寫這樣的代碼:

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

你的if/else抓住了錯誤的變量。您應該測試$prodId

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

explode()保證返回由一個字符串數組,所以基本上它只是爲標榜,這是一件好事。

+0

啊,是的,我現在明白了。非常感謝。 – Grant