微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP显示最流行的标签

我有这样一个数据库

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

现在我想显示数据库中最受欢迎的标签.我有一个函数,它适用于这样的数组:

$tag_array = array(
‘test1, test2 test, test3’,
‘test2, test4, test2’,
‘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 />";
}

}

这给了我一个错误

Warning: Invalid argument supplied for foreach()

所以我的问题是如何使用此功能显示数据库中最受欢迎的标签

谢谢

解决方法:

我的建议是你的数据库normalize.然后像这样的查询变得微不足道,并且表现要好得多.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐