【问题标题】:Remove Duplicate Lines in Text File删除文本文件中的重复行
【发布时间】:2015-05-22 13:11:12
【问题描述】:

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

文本文件示例:

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'),  

file 函数试图将文件读入 $lines 数组,然后 array_unique() 以删除重复的条目。然后将过滤后的结果放回同一个文件中。

【问题讨论】:

  • 看起来不错,您发出的问题是什么?
  • 您的代码有效。可能将最后一行替换为file_put_contents('textfile.txt', $lines);
  • 也许这就是你想要的? file_put_contents('textfile.txt', implode(PHP_EOL, $lines));
  • 如何在字符串上使用 array_unique...尝试回显 $lines 它是一个字符串

标签: php arrays file


【解决方案1】:

问题是每行末尾的换行符。因为您在最后一行的末尾没有换行符,所以它不会与其他行相同。

因此,只需在您读取文件时将其删除,然后在再次保存文件时添加:

$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));

如果你这样做:var_dump($lines);file() 通话之后你会看到它:

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 不客气。祝你有美好的一天:)(你知道我现在可以说,我使用 file() 中的标志是有原因的:stackoverflow.com/a/30350862 :)
【解决方案2】:

我知道这个问题是关于 PHP 的,我不知道您使用的是 Linux / Unix 还是 Windows,但是有一个非常好的 bash 解决方案可以消除重复项,我认为它可以更快地处理大文件。您甚至可以通过系统调用从 PHP 执行它:

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

【讨论】:

    【解决方案3】:

    试试这个

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

    【讨论】:

      猜你喜欢
      • 2010-11-17
      • 2018-01-31
      • 2011-09-17
      • 2014-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多