在文本文件中删除重复行

4

我是一名文本文件,我正在尝试删除重复的行。

文本文件示例:

new featuredProduct('', '21640'), 
new featuredProduct('', '24664'), 
new featuredProduct('', '22142'), 
new featuredProduct('', '22142'), 
new featuredProduct('', '22142'), 
new featuredProduct('', '22142'), 
new featuredProduct('', '22142'), 

我尝试过的PHP代码:

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

PHP文件名为duplicates.php, 文本文件与其在同一目录下。我只想留下如下内容:

new featuredProduct('', '21640'), 
new featuredProduct('', '24664'), 
new featuredProduct('', '22142'),  

文件功能正在尝试将文件读入$lines数组,然后使用array_unique()函数删除重复条目。然后将过滤后的结果放回同一文件中。

1
看起来没问题,你遇到的问题是什么? - javier_domenech
您的代码可以运行。也许可以将最后一行更改为 file_put_contents('textfile.txt', $lines); - Med
也许这就是你想要的?file_put_contents('textfile.txt', implode(PHP_EOL, $lines)); - Jonathan
你如何在字符串上使用array_unique...尝试echo $lines,它是一个字符串。 - Sunil Pachlangia
3个回答

6
问题在于每行末尾的换行符。因为最后一行末尾没有换行符,所以它与其他行不同。
因此,在读取文件时删除这些换行符,然后在保存文件时再添加它们:
$lines = file('test.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$lines = array_unique($lines);
file_put_contents('test.txt', implode(PHP_EOL, $lines));

如果您在file()调用之后立即执行var_dump($lines);,您将看到它:
array(7) {
  [0]=>
  string(36) "new featuredProduct('', '21640'), 
"
  [1]=>
  string(36) "new featuredProduct('', '24664'), 
"
  [2]=>
  string(36) "new featuredProduct('', '22142'), 
"
  [3]=>
  string(36) "new featuredProduct('', '22142'), 
"
  [4]=>
  string(36) "new featuredProduct('', '22142'), 
"
  [5]=>
  string(36) "new featuredProduct('', '22142'), 
"
  [6]=>
  string(34) "new featuredProduct('', '22142'), "
       //^^ See here                            ^ And here
}

非常好的回答,Rizier123。非常感谢您先生。谢谢。 - Hexana
@Hexana 不用谢。祝你有美好的一天 :) (你知道我现在可以说,我使用file()中的标志是有原因的:http://stackoverflow.com/a/30350862 :)) - Rizier123

3

我知道这个问题是关于PHP的,而我不知道你是否使用Linux/Unix或Windows操作系统,但是有一种非常好的bash解决方案可以更快地消除大文件中的重复数据。你甚至可以通过系统调用从PHP中执行它:

awk '!a[$0]++' input.txt

0

试试这个

$string = file_put_contents('textfile.txt');
$splitstr = explode('),', $string );
$str = implode('),',array_unique($splitstr));
var_dump($str);

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