使用PHP删除文本文件中的重复数据

7
我需要打开一个文本文件(file.txt),其中包含以下格式的数据。
ai
bt
bt
gh
ai
gh
lo
ki
ki
lo

最终我希望能够删除所有重复的行,只保留每个数据的一条记录。因此,结果应该是这样的:
ai
bt
gh
lo
ki

任何关于这个的帮助都将非常棒。

3
$unique = array_unique(explode("\n", file_get_contents('file.txt')));此行代码用于读取文件 'file.txt' 中的内容,并根据换行符("\n")将其拆分成数组,然后使用 array_unique 函数去除数组中的重复值,最后将结果赋值给变量 $unique - nkamm
@nkamm,请不要使用评论来发布解决方案。请删除您上面的评论。 - mickmackusa
@nkamm 一行代码,太棒了! - demo7up
4个回答

26

这应该就可以解决问题:

$lines = file('file.txt');
$lines = array_unique($lines);

file() 函数读取文件并将每行内容放入一个数组中。

array_unique() 函数从数组中移除重复的元素。

另外,若要将所有内容重新写回文件中:

file_put_contents('file.txt', implode($lines));

这个方法解决了问题,但是它在每个之间留下了一个空行。有没有办法去掉这些空行? - Cesar Bielich
哦,抱歉。我忘记了 file() 不会删除换行符。回答已经更新了。 :) - wassup
我有一个100MB的文本文件,其中有很长的行,而这段代码无法处理。有什么替代方案吗? - Arush Kamboj
@ArushKamboj 也许可以查看 http://stackoverflow.com/questions/4822165/php-read-large-text-file-log - Cesar Bielich

2

使用 php 的 file() 函数 读取文件。您将获得一个包含文件所有行的数组。接下来,使用 array_unique 函数去除重复项。

最终,您会得到类似如下的内容:

$lines = array_unique(file("your_file.txt"));

0

这个可能会起作用:

$txt = implode('\n',array_unique(explode('\n', $txt)));

请在这个仅包含代码的答案中添加一些解释。 - mickmackusa
@mickmackusa: $txt 包含数据并且 explode() 将每一行放入数组中(使用 \n 作为分隔符),这样我们可以使用 array_unique() 进行去重。然后使用相同的分隔符,通过 implode() 将所有内容合并在一起。 - SuN
尝试使用这个替代方案:编辑 - mickmackusa

0
$lines = file_get_contents('file.txt');
$lines = explode('\n', $lines);
$lines = array_unique($lines);
$lines = implode('\n', $lines);
file_put_contents('file.txt', $lines);

1
您的答案已进入审核队列,因为质量较低,可能会被删除。请在您的代码答案中添加一些解释,以便未来的读者可以充分受益。请勿在SO上发布仅包含代码的答案。 - mickmackusa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接