我有一个这样的数据库:

+----+---------------------+
| id | tags                |
+----+---------------------+
| 1  | test1, test2, test3 |
| 2  | test1, test2, test3 |
| 3  | test1, test2, test3 |
| 4  | test1, test2, test3 |
| 5  | buh1, buh2, buh3    |
+----+---------------------+

现在我想显示这个数据库中最流行的标签。我有一个函数,它可以处理这样的数组:
$tag_array=数组(
'测试1,测试2,测试3',
'测试2,测试4,测试2',
‘buh,buh2,buh3’);
功能:
function popularTags($tag_array) {
    $p = array();
    foreach($tag_array as $tags) {
        $tags_arr = array_map('trim', explode(',', $tags));
        foreach($tags_arr as $tag) {
            $p[$tag] = array_key_exists($tag, $p) ? $p[$tag]+1 : 1;
        }
    }
    arsort($p);
    return $p;
}

以下是如何显示最流行的标记:
foreach(popularTags($tag_array) as $tag=>$num)
{
    echo $tag, " (", $num, ")<br />";
}

到目前为止,这是一个普通的数组。
现在,我想从数据库中获取标记,所以我从数据库中提取值并运行如下函数:
$result = mysql_query("select * from DB ORDER BY date DESC");

while($row = mysql_fetch_array($result)){

   $tag_array = $row["$tags"];

foreach(popularTags($tag_array) as $tag=>$num)
{
    echo $tag, " (", $num, ")<br />";
}

}

但这给了我一个错误:
警告:为foreach()提供的参数无效
所以我的问题是如何用这个函数显示数据库中最流行的标记?
谢谢

最佳答案

我的建议是你的数据库。然后像这样的查询就变得微不足道了,而且性能也更好了。

select TagID, count(*)
from EntityTag
group by TagID
order by count(*) descending
limit 5

关于php - PHP显示最流行的标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7435785/

10-09 15:53