我需要打开一个文本文件(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));
但没有工作因为它只比较整行,如果不相同则会认为它不同
答案 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);
更新:在问题扩展之前添加