Удалить повторные строки php

Удалить повторные строки 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

Источник

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

Как удалить дубликаты из массива
Всем привет как удалить дубли из массива 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); ?>

Источник

Удалить повторяющиеся строки

Удалить не повторяющиеся элементы массива
Здравствуйте! нужна функция типа array_keys(array_flip()) наоборот у меня есть массив В.

Как удалить повторяющиеся символы в строке?
Есть необычная задача. Переменная с набором символов, как вырезать все повторяющиеся символы.

Как удалить повторяющиеся пробелы в тексте?
Допустим имеется текст, в котором между словами есть двойные, тройные и более пробелы. Задача.

я бы дела так: считал в два массива строк, потом бы в цикле сравнивал, и если найдутся совпадения, то удалял бы из второго массива

Эксперт PHP

ЦитатаСообщение от V@D!k Посмотреть сообщение

Эксперт HTML/CSSЭксперт PHP

Эксперт PHP

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

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

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

имелось в виду предварительное array_merge, забыл написать. Хотя да, вариант неверный в итоге, удалятся только дубли, исходные останутся

Эксперт HTML/CSSЭксперт PHP

file_put_contents( './file2.txt', array_diff( file('./file1.txt', FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES) file('./file2.txt', FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES) ) );

Эксперт PHP

Лучший ответ

Сообщение было отмечено vip72 как решение

Решение

1 2 3 4 5 6 7 8 9 10 11 12
# Получаем данные из файлов $data1 = file('file1.txt', FILE_IGNORE_NEW_LINES); $data2 = file('file2.txt', FILE_IGNORE_NEW_LINES); # Сличаем массивы $result = array_diff($data2,$data1); # Разбиваем назад в строку $result = implode("\n", $result); # Записываем в файл file_put_contents('file2.txt', $result);

А то, что мой код малёхо длиньше, чем у KOPOJI, ещё ничего не значит :umbrage:

Эксперт HTML/CSSЭксперт PHP

ну у меня и записывает в одну строку без пробела, и массивы «наоборот» 🙂

Добавлено через 47 секунд

file_put_contents( './file2.txt', join( PHP_EOL, array_diff( file('./file2.txt', FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES), file('./file1.txt', FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES) ) ) );

Эксперт PHP

KOPOJI, позвольте Вас поправить :).
Что запятую не поставили после первого вызова file() — глаза закроем, это опечатка просто :).
А вот что новые данные будут писаться не построчно, а в одну строку — это уже ошибочка :).
Ещё, чтобы достичь нужного результата, нужно поменять местами аргументы для array_diff(), так как (цитата):

Добавлено через 45 секунд

Опоздал. KOPOJI сам осознал свою ошибку :D.

Добавлено через 2 минуты

А вот что я использовал \n заместо PHP_EOL — это мой грешок :D.

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

Сообщение от V@D!k
потом бы в цикле сравнивал
Лучше не в цикле. Есть функция array_diff, например .
__________________

Как удалить повторяющиеся элементы двух массивов?
Имеется три массива $m_1, $m_2 и $m_3. Первый массив содержит буквенно-цифровые элементы.

Убрать повторяющиеся строки при записи в файл
Вот записываю в файл строку test_string $user = fopen(‘user_base.txt’, ‘a’);.

С++ Удалить повторяющиеся строки
Задача: Задан файл с записями вида: • фамилия; • имя. Создать файл с записями такого же вида.

Удалить повторяющиеся строки
В массиве строк нужно удалить повторяющиеся строки. В программе динамически выделил память.

Источник

как удалить повторные строки в двухмерном массиве

хочу удалить дублированные строки и сделать вот так
$new_array[0]=(100,60,40)
$new_array[1]=(100,99,60)
$new_array[2]=(100,60,35)
$new_array[3]=(100,99,40)
$new_array[4]=(100,50,40)
$new_array[5]=(100,40,35)
$new_array[6]=(100,99,35)
$new_array[7]=(100,60,50)
$new_array[8]=(100,99,50)


$r=0;$z=0;
while($r <$s) $x=0;
while($x <$s) if ($array[$x+1] != $array[$r]) $new_array[$z]=$array[$x+1];
$z++;
>
$x++;
>
$r++;
>
>

но это бред( помогите .. может есть какаято функция типа array_unique или подскажите алгоритм.. спасибо заранее

Spritz

25 декабря 2008 г. 11:09, спустя 27 минут 51 секунду

Если я правильно понял из названия темы, то речь идет о вложенных массивах. Тогда:


function arrayUnique($myArray)
<
if(!is_array($myArray))
return $myArray;

foreach ($myArray as &$myvalue) <
$myvalue=serialize($myvalue);
>

$myArray=array_unique($myArray);

foreach ($myArray as &$myvalue) <
$myvalue=unserialize($myvalue);
>

return $myArray;

>

Spritz

25 декабря 2008 г. 11:25, спустя 16 минут 20 секунд

Пожалуйста, авторизуйтесь, чтобы написать комментарий!

Источник

Читайте также:  Not Found
Оцените статью