2010-10-24 67 views
2

我有一个从MySQL数据库中取得的标签数组。显然,这些标签是字符串,并存储在一个数组中,数组中的一个元素存储每个标签。为了构建我的标签云,我希望能够对每个标签的出现进行计数,以找到最常见的标签。查找出现次数最多的值

举例来说,如果我有如下表...

tag1 
tag1 
hi 
bye 
gnu 
tux 
tag1 
tux 
tux 
tag1 
... 
etc

...中最常出现的标签是“标签1”我想要做的是算多少倍标签出现在数组中。 Max()在这里没有帮助,因为它只喜欢数值。

回答

9

使用array_count_values

<?php 
$array = array(1, "hello", 1, "world", "hello"); 
print_r(array_count_values($array)); 
?> 


Array 
(
    [1] => 2 
    [hello] => 2 
    [world] => 1 
) 

http://php.net/manual/en/function.array-count-values.php

如果你不想区分大小写的版本使用:

$ar = array_count_values(array_map('strtolower', $ar)); 
5

我怀疑你可以有你的数据库执行所有繁重的您。听起来像是你得到的标签数组,也许这样

SELECT tag FROM mytable; 

但你可以做到这一点

SELECT tag,count(*) AS occurrences FROM mytable 
GROUP BY tag 
ORDER BY occurences; 

变戏法似的,标签和它们的频率列表!

+0

实际的标签存储在数据库中的一个CSV名单的工作,但是,是我做的得到他们的数组 - 'explode()'非常方便! (PHP) – Bojangles 2010-10-24 16:15:18

+0

另外,我使用了标记为正确的解决方案,但是当有一个很好的重写大会的时候,我一定会使用这种方法 - 谢谢。 – Bojangles 2010-10-24 16:16:12

0

如果数组是这样

$array = array('tag1','tag1','hi','bye','gnu','tux','tag1','tux','tux','tag1'); 

$arrayCounting = array_count_values($array)); 

会给你一个这样的数组与

Array 
(
    [tag1] => 4 
    [hi] => 1 
    [bye] => 1 
    [gnu] => 1 
    [tux] => 3 
) 
+0

如果你不知道数组元素是什么? – 2016-06-16 06:39:47

+0

我不确定你的意思http://stackoverflow.com/users/5294439/michael-ozoemena这种技术不限于知道值 – 2016-06-16 06:44:53

+0

忘记了。使用这种方法我怎样才能得到数组中最常出现的元素的内容。我怎样才能得到它输出“tag1”记住我不知道“tag1”的存在。 – 2016-06-17 20:55:24

相关问题