Php 删除重复的ID';s

Php 删除重复的ID';s,php,algorithm,file,file-io,duplicates,Php,Algorithm,File,File Io,Duplicates,我在一个平面文件中有一个50000个ID的列表,需要删除任何重复的ID。对于我的问题,有什么有效的/推荐的算法吗 谢谢。逐行阅读字典,剔除重复的内容。全部读取后,写入一个新文件。我想如果您有足够大的内存空间,您可以将所有这些ID放入数组中 $array[$id] = $id; 这将自动清除重复项。您可以执行以下操作: file_put_contents($file,implode("\n",array_unique(file($file))); 它是如何工作的 使用函数file 返回一个数

我在一个平面文件中有一个50000个ID的列表,需要删除任何重复的ID。对于我的问题,有什么有效的/推荐的算法吗


谢谢。

逐行阅读字典,剔除重复的内容。全部读取后,写入一个新文件。

我想如果您有足够大的内存空间,您可以将所有这些ID放入数组中

$array[$id] = $id;
这将自动清除重复项。

您可以执行以下操作:

file_put_contents($file,implode("\n",array_unique(file($file)));
它是如何工作的

  • 使用函数
    file
    返回一个数组
  • 使用
    array\u unique
  • 用“\n”内爆那些唯一的行 获取字符串
  • 将字符串写回文件 使用
    file\u put\u内容

此解决方案假定平面文件中每行有一个ID。

我曾经做过一些实验,在PHP中我能得到的最快解决方案是对项目进行排序并手动删除所有重复的项目

如果性能对您来说不是太大的问题(我怀疑50000不是那么大),那么您可以使用
array\u unique()

如果您可以使用终端(或本机unix执行),最简单的方法是:(假设文件中没有其他内容):


sortfilteredIds.txt

您可以使用命令行
sort
程序对ID列表进行排序和筛选。这是一个非常有效的程序,并且可以很好地扩展

sort -u ids.txt > filteredIds.txt

您可以通过array/array_unique来实现,在这个示例中,我猜您的ID是由行分隔的,如果不是这样,只需更改它

$file = file_get_contents('/path/to/file.txt');
$array = explode("\n",$file);
$array = array_unique($array);
$file = implode("\n",$array);
file_put_contents('/path/to/file.txt',$file);

如果您可以在逗号(或任何分隔符)上分解文件内容,则array_unique将生成最少(且最干净)的代码,否则如果您正在解析文件,则使用$array[$id]=$id是最快且最干净的解决方案。

可能不是最快的解决方案,但我记得array_unique。将它们全部放入一个数组(每个元素1个id),使用array_unique并将它们写回文件。有什么反对这样做的吗?他们之间有断线吗?(\n)?是的,它们之间用换行符分隔。只有当ID连续且重复项相邻时,uniq才会工作。这一点很好;我以为uniq自动排序:
sortfilteredIDS.txt
我运行了这个程序,它在大约一秒钟内完成了它。我想这需要更长的时间。谢谢。@Jamie:IO可能会使处理过程相形见绌,因为生成唯一集的最大算法复杂度为n log n,这有点快,而大多数磁盘IO非常慢。谢谢您的完整回答。在看到这个答案之前,我选择了一个答案。@Jamie Redmond别担心:)