Мне нужно открыть текстовый файл (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);
Обновление: добавлено до того, как вопрос был расширен