删除文本文件中的重复行

时间:2015-05-22 13:11:13

标签: php arrays file

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

文字文件示例:

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()以删除重复的条目。然后将过滤后的结果放回同一个文件中。

3 个答案:

答案 0 :(得分:7)

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

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

$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
}

答案 1 :(得分:2)

我知道这个问题是关于PHP的,我不知道你使用的是Linux / Unix还是Windows,但是有一个非常好的bash解决方案可以摆脱重复,我觉得对于大文件来说会更快。您甚至可以通过系统调用从PHP执行它:

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

答案 2 :(得分:0)

试试这个

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