Heim  >  Artikel  >  Backend-Entwicklung  >  100万条记录的文本文件,取出重复数最多的前10条。

100万条记录的文本文件,取出重复数最多的前10条。

WBOY
WBOYOriginal
2016-06-23 13:26:341644Durchsuche

1. 100万条记录的文本文件,取出重复数最多的前10条。
示例文本:
098
123
234
789
……
234
678
654
123

求思路


回复讨论(解决方案)

导入到表中,然后用sql统计,不知道可行不。你可以试试。

导入到表中,然后用sql统计,不知道可行不。你可以试试。


这样肯定可行,但应该不是出题者想要的解决方法。想要采用PHP处理或算法

explode //读取分割成数组
array_count_values//统计重复次数
arsort//排序,得到结果

可以对文本分块处理,记录结果,估计一次性读取的话,内存也吃不住...

可以对文本分块处理,记录结果,估计一次性读取的话,内存也吃不住...


恩,你的方法靠普, 能细说一下么

$fp = fopen('文件', 'r');while($buf = fgets($fp)) {  $res[$buf]++;}fclose($fp);arsort($res);$res = array_keys(array_slice($res, 0, 10));print_r($res);

当100万条记录半数是唯一的情况下,与下面的算法没有多大区别
$a = file('文件');$res = array_count_values($a);arsort($res);$res = array_keys(array_slice($res, 0, 10));print_r($res);

先批量插入到数据库,然后 使用 sql 语句的 group by 和order by实现

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn