2011-05-16 64 views
0

如何获取下列数组中包含的字段中的项目的频率?标签的计数频率

// 
... 
... 
//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倍

,你可以做到这一点
} 
+0

像往常一样,答案是NORMALIZE您的数据库SCHEMA – symcbean 2011-05-16 13:58:06

回答

1

要算在你的数据库使用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); 
0

的一种方法是使用SQL计数功能。那么你就不需要以编程方式做这件事。但是,如果您无法控制查询并必须在代码中执行此操作,则需要遍历数组并检查查找的标签是否包含在每条记录中。除非查询已经找到只有那些需要的标签实例,否则只需要获得数组的大小。

0

你可以试试这个代码:

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