$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我在这里失踪了什么?
答案 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_split
与PREG_SPLIT_NO_EMPTY
标志一起使用。这样你就不会得到空字符串:
$cartProducts = preg_split("/,/", $prodID, NULL, PREG_SPLIT_NO_EMPTY);