Мне нужно открыть текстовый файл (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));
но не работал, потому что он сравнивает всю строку, если не то же самое,
Это должно сработать для вас:
(Здесь я сначала просматриваю каждый элемент из $lines
с помощью array_map()
затем я array_map()
каждое значение с помощью :
и возвращает первый элемент. После этого я использую array_intersect_key()
с созданным массивом раньше, чем я использую array_unique()
для получить уникальные ключи и получить пересечение с полным массивом)
<?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 )
Какие ошибки или проблемы у вас есть с array_unique, поскольку это работает для меня:
$lines = file('foobar.txt'); $lines = array_unique($lines);
Обновление: добавлено до того, как вопрос был расширен