我有一个字段存储标记逗号分隔。我正在尝试计算列出的项目数量。
假设我已从数据库中提取数据,$ 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变量可以包含任意数量的项目 - 从空白到单个项目(如“视频”)到多个项目“视频,游戏,商店”等。
有人可以帮我解决我做错的事吗?
答案 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)