как с точки зрения скорости и правильности написать скрипт работа которого заключается вот в чем: есть файл, содержание допустим: 11 22 йц@ук 44 66 77 фы@ва 55 88 99 яч@см 00 44 55 йц@ук 22 нада убрать дубли строк в которых повторяются 3 столбик, т.е. где мыла. как я придумал: сначала с помощью регулярки создаем массив всех мыл. потом удаляем дубли с помощью функции array_unique. потом цикл для каждой строки в файле, так же с помощью регулярки вытаскиваем мыло и еще запускаем цикл для каждого елемента в массиве мыл. и если они равны то сохраняем строчку и выходим из первого цикла. какие будут предложения?)
Поставить это в БД и не парится Ищи прогу SQLYog В ней удобный импорт из любого структурированного файла. Потом кури distinct И ВСе!
Используй bash скрипты под Linux. Мне кажется это самое простое. Тебе нужны команды sort и uniq. Первая сортирует, вторая удаляет дубли. Так вот, во второй можно указать, какую часть строки исследовать. (Нужно почитать мануал grep и написать регулярку). Пишется с манами 30 минут. P.S. Если не разберешься - завтра могу помочь. Го ПМ. Сейчас мегаустал и сплю...
))чет в инете видел что array_unique сохраняет индексы. каким образом замутить?) sql не совсем подходит) нужны прога для частого использования))
Раз тебе не понравился совет spider-intruder Тогда можно несколько переделать твой алгоритм: 1. Как ты и сказал дернуть все мыла регуляркой и сохранить в 2 массива 2. 1 массив будет исходный, а по 2-ому пройтись через array_unique, затем вычислить между ними разницу, цель - найти все повторяющиеся значения. 3. Делаем проход с удалением повторяющихся значений по файлу - это будет оптимальней, полагая, что уникальных записей будет больше чем повторяющихся, следовательно проходов в цикле будет меньше. P.S. Вариант с БД ловчее
$file = file('file.txt'); $arr = array(); for($i=0;$i<count($file);$i++) { $file[$i] = explode(' ', $file[$i]); if(in_array($file[$i][2], $arr)) { unset($file[$i]); } else { $arr[] = $file[$i][2]; } }
2FeoЩту в твоем скрипте если я не ошибаюсь дубли вместе с оригиналами удалятся) а их нада оставить) $arr Это походу массив мыл?) вот что получилось)) <?php $file_ar=file('c:\1.txt'); foreach($file_ar as $r){ preg_match("/([[:alnum:]]|[[unct:]]){1,}@(.*)\.[[:alnum:]]{2,3}/",$r,$o); $email_ar[]= $o[0]; } $email_ar=array_unique($email_ar); $arr = array(); for($i=0;$i<count($file_ar);$i++) { preg_match("/([[:alnum:]]|[[unct:]]){1,}@(.*)\.[[:alnum:]]{2,3}/",$file_ar[$i],$o); $email1= $o[0]; if((in_array($email1,$email_ar)) and (!in_array($email1,$arr))) { $arr[]=$email1; echo $file_ar[$i].'<br>'; }} ?>