【问题标题】:sort an $array of ints by repetition and remove repetitions通过重复对整数的 $array 进行排序并删除重复
【发布时间】:2011-06-09 23:09:34
【问题描述】:

我需要在 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 查询的结果

我只有一个关联属性“id_deseada”,所以我现在有

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

所以不是那样,我想我必须像第一个例子那样做;排序 $result 按重复次数排序,并且可能在具有新字段 'count' 的新数组中更好?

这一切都是因为这个查询而开始的:

SELECTarticles.id as id_deseada,tags.* FROM article,tags WHERE tags.id_article =articles.id AND tags.name IN ('name one','name two','form search inputs','.. .)

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

【问题讨论】:

  • 为什么不在 SQL 查询本身中解决(至少部分)这个问题?
  • 因为我很擅长 mysql,所以我会发布查询

标签: php sorting no-duplicates


【解决方案1】:

首先,生成这样的值数组:

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

然后,countsort

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

【讨论】:

  • 我会试着让你知道.. 但是有一个问题,然后我可以做 $result[id_deseada],或者我只是去一个 'for' 和 $result[$i] 吗?
  • 后者,$result 在您的示例中将是 [1,5,9,2,3,4]。
  • 好的,不用重复就可以了!干杯!但顺序相反(1是最后一个)
  • @Toni Michel Caubet。你是对的,更新为颠倒顺序:使用 aRsort 而不是 asort。
【解决方案2】:

您实际上可以使用 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。

【讨论】:

  • 我会尽力让你知道,谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-12-18
  • 2013-12-03
  • 1970-01-01
  • 2011-03-27
  • 2014-04-29
  • 2017-10-09
  • 2023-03-07
相关资源
最近更新 更多