如何获取以下数组中包含的字段中项目的频率?
//
...
...
//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;
EG。
//大米x 23倍
//豆x 12次
}
答案 0 :(得分: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'];
或者,对于一个just标记,让数据库使用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);
答案 1 :(得分:0)
您可以这样做的一种方法是使用sql count函数。然后你不需要以编程方式执行此操作。但是,如果您无法控制查询并且必须在代码中执行此操作,则您必须遍历数组并检查您要查找的标记是否包含在每条记录中。除非查询已经只找到您需要的那些标记实例,否则只需获取数组的大小。
答案 2 :(得分:0)
你可以试试这段代码:
foreach($tagarray as $key => $value
{
$tag_count[$value] += 1;
}
然后:
foreach ($tag_count as $tag => $count)
{
echo $tag.'x'.$count.'times';
}