Count()以逗号分隔的字符串返回1并使用explode

时间:2011-09-06 02:41:35

标签: php count explode

我有一个字段存储标记逗号分隔。我正在尝试计算列出的项目数量。

假设我已从数据库中提取数据,$ tags变量具有以下信息:

$tags = "Videos,Magazines,Store";

// First separate tags by commas, put into into array
$tagArray = explode(",",$tags);

// Count how many items are in the array
$arrayCount = count($tagArray);

总是返回“1”,无论数组中是否有项目。 $ tags变量可以包含任意数量的项目 - 从空白到单个项目(如“视频”)到多个项目“视频,游戏,商店”等。

有人可以帮我解决我做错的事吗?

2 个答案:

答案 0 :(得分:2)

从PHP手册:

如果分隔符包含一个未包含在字符串中的值并且使用了负限制,则将返回一个空数组,否则将返回包含字符串的数组。

所以,简单地说 - 如果在字符串中找不到分隔符,则不会执行任何操作。如果您的变量包含空字符串,则count()将返回1. 您需要NULL值才能计数( )返回0.

试试这个:

    $tags = "Videos,Magazines,Store";

    // First separate tags by commas, put into into array
$tagArray = ($tags != '')?explode(",",$tags):NULL; // Count how many items are in the array
$arrayCount = count($tagArray);

答案 1 :(得分:0)

您的代码工作正常,因为您提供了正确的输入字符串来使用代码,所以您的代码按预期返回3,但是当您将数据库字段的值分配给时会出现问题Serializable,因为它也可以包含您在问题中所说的空字符串

如您所知,它在db字段中可以是零个或多个零个标签,因此,当$tags不包含标签或空字符串时,如php explode()函数手册所述:

  

如果定界符包含的值不包含在字符串中,则将返回包含字符串的数组,例如[“”]

因此,当您的$tags包含空字符串时,$tags将返回包含空字符串的数组,因此现在explode()使用$tagArray=[""]函数爆炸,按照php manual of count()

  

返回array_or_countable中的元素数。 当参数既不是数组也不是具有已实现Countable接口的对象时,将返回1 。有一个例外,如果array_or_countable 为NULL,则将返回0

所以因为您的count()不是而是$tagArray,所以$tagArray=[""]返回了一个。

要解决此问题,请使用以下代码:

count($tagArray)