Php убираем дубликаты строк

Удаление повторяющихся строк из нескольких (2) текстовых файлов в PHP

а второй .txt-файл содержит новые данные первого .txt-файла. Я использую второй файл .txt для скрипта.

Я не могу удалить дубликаты. (Я имею в виду, что я пытаюсь получить новые значения в соответствии со старыми значениями), поэтому скрипт всегда использует данные с новыми, а также старыми.

Есть ли способ открыть все файлы, удалить дубликаты и сохранить строки в соответствии со вторым файлом?

ПРИМЕРЫ ТРЕХ РЕФРЕССОВ

здесь FIRST refresh и 2 .txt-файла

первый .txt-файл (вы должны подумать, что он имеет 2000 строк) обновить curl robot

Something here10 Something here9 Something here8 Something here7 Something here6 Something here5 Something here4 Something here3 Something here2 Something here1 

второй .txt-файл, который я буду использовать

Something here10 Something here9 Something here8 Something here7 Something here6 Something here5 Something here4 Something here3 Something here2 Something here1 

здесь SECOND refresh и 2 .txt-файла

файл .txt (вы должны подумать, что у него есть 2000 строк) обновить curl bot

Something here14 Something here13 Something here12 Something here11 Something here10 Something here9 Something here8 Something here7 Something here6 Something here5 

второй .txt-файл, который я буду использовать

Something here14 Something here13 Something here12 Something here11 

здесь THIRD refresh и 2 .txt-файлы

файл .txt (вы должны подумать, что у него есть 2000 строк) обновить curl bot

Something here16 Something here15 Something here14 Something here13 Something here12 Something here11 Something here10 Something here9 Something here8 Something here7 

второй .txt-файл, который я буду использовать

Something here16 Something here15 

EDIT: я опубликовал два новых обновления

здесь FOURTH refresh и 2. .txt файлы

файл .txt (вы должны подумать, что у него есть 2000 строк) обновить curl bot

Something here20 Something here19 Something here18 Something here17 Something here16 Something here15 Something here14 Something here13 Something here12 Something here11 

второй .txt-файл, который я буду использовать

Something here20 Something here19 Something here18 Something here17 

здесь есть FIFTH refresh и 2. .txt файлы

файл .txt (вы должны подумать, что у него есть 2000 строк) обновить curl bot

Something here24 Something here23 Something here22 Something here21 Something here20 Something here19 Something here18 Something here17 Something here16 Something here15 

второй .txt-файл, который я буду использовать

Something here24 Something here23 Something here22 Something here21 

Я старался поддерживать это как можно более высокий уровень, но по существу толкать каждую строку на массив, а затем использовать array_unique для удаления дубликатов:

 $line_array = array(); $files = getFiles(); foreach($files as $file) < $lines = $file->getAllLines(); foreach($lines as $line) < $line_array[] = $line; >> $without_duplicates = array_unique($line_array); 

(чтение и интерпретация комментариев) Я думаю, что вам нужен следующий код, используя PHP-массив push

"; // just checking -> will be removed print_r($array1); // just checking -> will be removed echo"

Array 2:
"; // just checking -> will be removed print_r($array2); // just checking -> will be removed echo"

"; // will be removed $newarray = array(); // create new empty array to receive new data foreach ($array1 as $value) < /* parse array */ // here, we'll make use of PHP array_push if( !in_array($value, $array2) ) < // if value is not in 2nd array array_push($newarray, $value); // we add to new array we created >else < /* do nothing */ >> echo"New array with duplicate removed:
"; // just checking -> will be removed print_r($newarray); // just checking -> will be removed file_put_contents('output.txt', $newarray); // we write new content of array to file ?>

Источник

Читайте также:  Length function in cpp

Как я могу удалить дубликаты строк в файле с помощью PHP (включая «оригинальную»)?

Ну, мой вопрос очень прост, но я нигде не нашел правильного ответа. Что мне нужно, так это найти способ, который читает файл .txt, и, если есть дублирующаяся строка, удалите ВСЕ из них, не сохраняя ни одного. Например, в .txt содержится следующее:

Поскольку код должен удалить дублированную строку, все из них. Я искал всю сеть, но он всегда указывает на ответы, которые удаляют дублированные строки, но сохраняют одну из них, например этот , этот или же тот .

Я боюсь, что единственный способ сделать это — прочитать строку x и проверить весь .txt, если он найдет равный результат, удалить и удалить строку x тоже. Если нет, перейдите к следующей строке. Но файл .txt, который я проверяю, содержит 50 миллионов строк (~ 900 МБ), я не знаю, сколько памяти мне нужно для выполнения такого рода задач, поэтому я ценю некоторую помощь здесь.

Решение

Прочитайте файл построчно и используйте содержимое строки в качестве ключа ассоциативного массива, значения которого являются количеством раз, которое появляется строка. После того, как вы закончите, запишите все строки, значение которых равно 1. Для этого потребуется столько памяти, сколько для всех уникальных строк.

$lines = array(); $fd = fopen("inputfile.txdt", "r"); while ($line = fgets($fd)) < $line = rtrim($line, "\r\n"); // ignore the newline if (array_key_exists($line, $lines)) < $lines[$line]++; >else < $lines[$line] = 1; >> fclose($fd); $fd = fopen("outputfile.txt", "w"); foreach ($lines as $line => $count) < if ($count == 1) < fputs($fd, "$line" . PHP_EOL); // add the newlines back >> 

Другие решения

Я сомневаюсь, что есть одна и только одна функция, которая делает все, что вы хотите сделать. Итак, это разбивает его на шаги …

Читайте также:  Javascript preg match all

Во-первых, можем ли мы загрузить файл непосредственно в массив? Смотрите документацию для file команда

Теперь у меня есть все строки в массиве. Я хочу посчитать, сколько у меня каждой записи. Смотрите документацию для array_count_values команда.

$counts = array_count_values($lines); 

Теперь я могу легко перебрать массив и удалить любые записи, где количество> 1

foreach($counts as $value=>$cnt) if($cnt>1) unset($counts[$value]); 

Теперь я могу превратить ключи массива (которые являются значениями) в массив.

$nondupes = array_keys($counts); 

Наконец, я могу записать содержимое в файл.

file_put_contents('myoutputfile.txt', $nondupes); 

Я думаю, что у меня есть решение гораздо более элегантное:

$array = array('1', '1', '2', '2', '3', '4'); // array with some unique values, some not unique $array_count_result = array_count_values($array); // count values occurences $result = array_keys(array_filter($array_count_result, function ($value) < return ($value == 1); >)); // filter and isolate only unique values print_r($result); 

Источник

Как удалить дубликаты строк

Как удалить дубликаты из массива
Всем привет как удалить дубли из массива Array ( ‘Kia’ => Array ( .

Удалить дубликаты из многомерного массива
$ProductsArray = Array ( => stdClass Object ( => AN-687WK .

Как регулярками удалить дубликаты строк?
Всем привет, немогу никак сообразить как удалить дубли строки, или полностью всю строку, от 1.

Как из Таблице Paradox удалить дубликаты строк
Здравствуйте. Есть таблица Paradox в которой есть поле Num 1 1 2 3 3 Пожалуйста напишите.

функцией file вогнать файл в массив, функцией array_unique удалить не уникальные значения

если файл больше 1 мб, можно построчно проверять

ЦитатаСообщение от ytf Посмотреть сообщение

функцией file вогнать файл в массив, функцией array_unique удалить не уникальные значения
если файл больше 1 мб, можно построчно проверять

site_all_image.rar
Сначала удаляет дубликаты,а где-то после 30 000 й строки оставляет пустые строки д и дубликаты тоже.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
 $filename = 'site_all_image.txt'; $input = file($filename); $result = array_unique($input); $fp = fopen($filename , 'a'); foreach ($result as $value) { if (!empty($value)) { //$fp = fopen($filename , 'a'); fwrite($fp, $value."\r\n"); //fclose($fp); } } fclose($fp); ?>

Источник

Php убираем дубликаты строк

//удаляет из файла file.txt все одинаковые строки
set_time_limit(0);
$file=»file.txt»;
$infa=file(«$file»);
echo count($infa),»
«;
$_file=file($file);
$_file=array_values(array_unique($_file));

echo «Unique strings =»,$i,»
«;
echo «done
«; flush();
fclose($fp);

Fatal error: Allowed memory size of 20971520 bytes exhausted (tried to allocate 66 bytes) in /home/. /clear.php on line 8

Цитата:

А подскажи как это написать? я не очень силён в PHP

в данном случае в лоб, с последующей оптимизацией.
в лоб — берешь первую строку и пробегаешься по остальным, ища тоже самое
(для оптимизации можно брать не одну).
прошелся, если есть, то эту строку не пишешь в новый файл, если нет, то пишешь..
берешь следующий блок и тоже самое.

Читаем первую строку и записываем ее в новый файл.
Читаем вторую строку — и проверяем нет ли этой строки в новом файле.. если нету — дописываем в новый файл. если есть — не пишем.
Берем третью строку и проверяем нет ли ее в новом файле. если нету — дописываем в новый файл. есть есть — не пишем.

Хотя наверное ты это и имел ввиду =))

Цитата:

Хотя наверное ты это и имел ввиду =))

тоже самое, только наоборот. вопрос только в том, где будет меньше лишних считываний.

1. Загоняем строки в массив
2. Удаляем не уникальные
3. Сохраняем массив

Курим бамбук или что покрепче.

Можно join — тогда еще короче будет.

1. Создаем хэш, его и каждую строку вешаем ключен, а значение инкрементируем. $strings++
Таким образом получаем уникальные строки и количество каждой.

2. Дерево. Берем n строчек файла(допустим первые 5000), ищем уникалы, сохраняем во временный, далее следующие n и т.д., после завершение цикла обрабатываем первым методом временный файл.

set_time_limit(0) — решение не особо хорошее, после висения скрипта n минут погонят с хостинга, к гадалке не ходи (это если настройки сервера вообще позволят выполнить такой канделябр).

Цитата:

Прежде чем отвечать ты сначала вчитайся в приведенный код и найди отличия .

Цитата:

Еще можно создать БД mysql

А если нет доступа к серверу БД?
Как вариант, можно создать пустой хеш, связать его с db файлом, и все.. будет очень быстро и красиво. )
Наверно это самый оптимальный вариант, чтобы не ломать мозги.

А вообще задача интересная.
Может быть из исходного файла сделать отсортированный? А потом уже легко убить дубли? Но тогда выходной файл будет также отсортирован, оно нам надо?

Давайте предложим каждый по варианту, а потом посмотрим чей будет быстрее?

Задача.
Скриптом на PHP или Perl убить повторяющиеся строки в большом файле.

Добавлено:
Кстати, файл 400000 записей я заполнил md5 хешами случайных чисел от 1 до 2000, и что интересно, 12 мегабайтный файл без повторений стал размером 65 кб
Вот тебе и псевдослучайность

Ну вот например:
исходный файл = 5 013 547 байт
после удаления дубликатов = 4 620 837 байт
повторяем операцию получаем файл = 4 767 335 байт
повторяем операцию получаем файл = 5 013 547 байт

В файлах добавляется больше пустых строк между урлами, как это исправить?

Код:

$fw=fopen(‘out.txt’,’w’);
$fr=fopen(‘test.txt’,’r’);
while (!feof($fr))
<
$str = fgets($fr, 4096);
$curpos=ftell($fr);
if (check_string($str,$fr))
else
>
fclose($fr);
fclose($fw);
function check_string($str,$fp)
<
while (!feof($fp))
<
$strf = fgets($fp, 4096);
if ($strf==$str) return true;
>
return false;
>
?>

ед, что вроде зацикливается где то после обработки..щас гляну
ну да, на границе..

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Скрипт для удаления одинаковых строк из файла

Реклама на форуме Ru.Board.

Powered by Ikonboard «v2.1.7b» © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2023

Источник

Оцените статью