count(array)返回1但数组为空

时间:2013-05-29 08:25:24

标签: php arrays

$cartProducts = explode(',', $prodID);
echo count($cartProducts) 

var_dump($ cartProducts)的输出;是:

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

这给了$ count值1,但是数组是空的,或者至少我的数据库列是空的。

我尝试了以下内容:

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

但我得到了相同的结果:$ count = 1

Jeez我在这里失踪了什么?

5 个答案:

答案 0 :(得分:20)

您可以使用array_filter()

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

使用strlen()来判断数组元素是否为“空”;没有array_filter的第二个参数,它也会将'0'视为空。

更好

使用array_filter()非常通用;在您的情况下,如果$prodID是空字符串,最好首先检查strlen($prodId),例如:

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

答案 1 :(得分:8)

数组不为空。它有一个元素,其中包含一个长度为0的字符串。

count(array_filter($array));

您不需要将第二个参数传递给array_filter(),因为空字符串将评估为false(因此会被删除)。

答案 2 :(得分:3)

你的if / else捕获了错误的变量。您应该测试$prodId

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

explode()保证返回一个由字符串组成的数组,所以基本上它就像宣传的那样工作,这是一件好事。

答案 3 :(得分:1)

您可以像这样编写代码:

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

答案 4 :(得分:0)

您可以将preg_splitPREG_SPLIT_NO_EMPTY标志一起使用。这样你就不会得到空字符串:

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