Подскажите решение задачки на "пальцах" поэтапно... код сам набрасаю /*Дан файл. Каждая строка содержит имя, пароль и email, разделенные символами ':' (двоеточие). Например: john:12345: john@gmail.com kate:12345: kate@gmail.com test:21345: test@gmail.com mike:12145: test@gmail.com Удалить строки с повторами email и строки, в которых совпадают имена (т.е. удалится последняя строка).*/
сделать четыре массива по кол-ву строк? а как? я делал так, $arr = file(text.txt) потом форычем перебирал value и explod ом все разбивать, но если подготовить $users, то форыч перезаписывает все сверху и $users получает данные только последней строки...
Ну я бы сделал просто. 1. Создал второй временный файл 2. Создал бы два массива - один для e-mail, другой для имён. 3. Читал бы строки первого файла по одной, разбивал их по двоеточию 4. Если ни имя ни e-mail из прочтённой строки не найдены в массиве, запихивал бы их туда, а строку бы записывал во временный файл. 5. После всего процесса удалил бы первый файл, а свой второй временный бы переименовал. Кодь
т е если есть два одинаковых имени то удалить обе строки? --- Добавлено --- P. S. IMHO можно обойтись одним двумерным массивом. --- Добавлено --- Если, конечно, в файле не 100к строк.
А еще можно хранить все в XML или, еще лучше, в JSON или в native php, чтоб опкэшером жралось, и не придумывать велосипедных сериализаций. Про открытые пароли в хранилище такиично умолчим, но осуждающе нахмурим брови...
PHP: // read all //$text = file_get_contents($file); $text = 'john:12345: john@gmail.com kate:12345: kate@gmail.com test:21345: test@gmail.com mike:12145: test@gmail.com'; $lines = explode(PHP_EOL, $text); $emails = []; foreach($lines as $line){ list($user, $num, $email) = explode(":", $line); $email = trim($email); if(!isset($emails[$email])){ $emails[$email] = [$user, $num]; } } var_dump($emails); // read by line $emails = []; $handle = fopen($file, "r"); while($line = fgets($handle)){ list($user, $num, $email) = explode(":", $line); $email = trim($email); if(!isset($emails[$email])){ $emails[$email] = [$user, $num]; } } fclose($handle); var_dump($emails); Второе не тестировал, но должно работать.
@TeslaFeo и что теперь ? Я не знаю, попадает ли под NDA описание ацаца в моей текущей конторе ? Ну вообщем тут такая же история, при учете 5ти летнего легаси.
очень странный ответ. Ощущение какой-то скрытой агрессии. по моим расчетам эта фраза предельно ясная и не требует дополнительных комментариев.