删除文本文件中的重复行

时间:2015-03-13 20:43:26

标签: php regex

我需要打开一个文本文件(file.txt),其中包含以下格式的数据: -

dave : 50lb : hlof
jimmy : 55lb : okay
dave : 12lb : krsho

我想删除具有重复起始字的行所以结果将如下所示: -

dave : 50lb : hlof
jimmy : 55lb : okay

我一直在考虑使用array_unique,但没有工作,所以任何想法都可以做到......也许可以和regex一起使用!

更新

我的尝试是

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

但没有工作因为它只比较整行,如果不相同则会认为它不同

2 个答案:

答案 0 :(得分:4)

这应该适合你:

(这里我首先使用array_map()查看$lines的每个元素,然后使用:查看explode()每个值并返回第一个元素。之后我使用{{ 3}}使用之前创建的数组,我使用array_intersect_key()获取唯一键并获得与完整数组的交叉)

<?php

    $lines = file("test.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

    $lines = array_intersect_key($lines, array_unique(array_map(function($v){
        return trim(explode(":", $v)[0]);
    }, $lines)));

    print_r($lines);

?>

输出:

Array ( [0] => dave : 50lb : hlof [1] => jimmy : 55lb : okay )

答案 1 :(得分:0)

您对array_unique有什么错误或问题,因为它对我有用:

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

更新:在问题扩展之前添加