标签的计数频率
问题描述:
如何获取下列数组中包含的字段中的项目的频率?标签的计数频率
//
...
...
//database stuff
while($row=mysql_fetch_array($result))
{
//Retrieve tags for this article
$tags=$row["art_tags"];
$tagarray=explode(",",$tags);
foreach($tagarray as $key => $value)
{
//这里需要的解决方案
//如何搜索整个art_tags领域在数据库中,并得到所有标签
echo $value;
例如频率。
//水稻×23倍
//豆类×12倍
}
答
要算在你的数据库使用array_count_values所有标签():
$all_tags = array();
while ($row = mysql_fetch_assoc($result)) {
$all_tags = array_merge($all_tags, explode(',', $row['art_tags']));
}
$all_tags = array_count_values($all_tags);
echo $all_tags['rice'];
或者,只需一个标签,让数据库用COUNT(*)为您完成工作:
$tag = 'rice';
$sql = "SELECT COUNT(*) FROM articles
WHERE art_tags LIKE '$tag'
|| art_tags LIKE '$tag,%'
|| art_tags LIKE '%,$tag'
|| art_tags LIKE '%,$tag,%'";
$result = mysql_query($sql);
list($number) = mysql_fetch_row($result);
答
的一种方法是使用SQL计数功能。那么你就不需要以编程方式做这件事。但是,如果您无法控制查询并必须在代码中执行此操作,则需要遍历数组并检查查找的标签是否包含在每条记录中。除非查询已经找到只有那些需要的标签实例,否则只需要获得数组的大小。
答
你可以试试这个代码:
foreach($tagarray as $key => $value
{
$tag_count[$value] += 1;
}
然后:
foreach ($tag_count as $tag => $count)
{
echo $tag.'x'.$count.'times';
}
+0
这个工作,但它连续计数的频率。我想在包括所有行的整个art_tags列中统计频率。 – 2011-05-16 13:26:06
像往常一样,答案是NORMALIZE您的数据库SCHEMA – symcbean 2011-05-16 13:58:06