我有一个文本文件,我试图删除重复的行。
文本文件示例:
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文件名为duplicate . PHP,文本文件位于同一目录下。我希望只留下:
new featuredProduct('', '21640'),
new featuredProduct('', '24664'),
new featuredProduct('', '22142'),
file函数试图将文件读入$lines数组,然后array_unique()删除重复条目。然后将过滤后的结果放回同一个文件中。
问题在于每行末尾的新行字符。因为在最后一行的末尾没有一个新的行字符,所以它将与其他行不一样。
所以当你读取文件时删除它们然后在再次保存文件时添加它们:
$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
}
我知道这个问题是关于PHP的,我不知道你是使用Linux/Unix还是Windows,但是有一个非常好的bash解决方案可以摆脱重复,我认为对于大文件来说它会更快。您甚至可以通过系统调用从PHP执行它:
awk '!a[$0]++' input.txt
试试这个
$string = file_put_contents('textfile.txt');
$splitstr = explode('),', $string );
$str = implode('),',array_unique($splitstr));
var_dump($str);