通过重复排序$数组的int并删除重复

时间:2011-01-16 12:01:56

标签: php sorting no-duplicates

我需要在php中执行此操作 假设我有[1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,4,5,5,5,5,5,5,5,5,5,5,5,9,9,9,9,9] 我想要[1,5,9,2,3,4]

但我的情况有点不同,这是来自mysql查询的结果

我只有一个asociative atribute'id_deseada',所以我现在

while($row = mysql_fetch_array($result){
         $t = $row['id_deseada'];
 }

所以不是那样,我想我必须像第一个例子一样做事;按重复次数排序$ result,并在新数组中使用新字段'count'进行beetter?

这一切都是因为这个问题而开始的:

选择articles.id为id_deseada,tags。* FROM文章,标签WHERE tags.id_article = articles.id AND tags.name IN('name one','name two','form search inputs','.. 。)

问题是每个标签返回一个结果,我想要每篇文章的结果..

2 个答案:

答案 0 :(得分:2)

首先,生成如下的值数组:

$vals = array();
while($row = mysql_fetch_array($result){
         $vals[] = $row['id_deseada'];
}

然后,countsort

$valCounts = array_count_values($vals);
arsort($valCounts);
$result = array_keys($valCounts);

答案 1 :(得分:0)

您实际上可以使用SQL查询来执行此操作。例如,我们有这个表:

create table lol (id_deseada int);
insert into lol values (1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(2),(3),(4),(5),(5),(5),(5),(5),(5),(5),(5),(5),(5),(5),(9),(9),(9),(9),(9);

您可以通过重复使用分组和排序从数据库中选择id_deseada

SELECT id_deseada FROM lol
GROUP BY id_deseada
ORDER BY COUNT(*) DESC

结果:1​​,5,9,2,3,4。