Сразу код.
<?php
// массив с которого нужно удалить ключи которые присутствуют в массиве $in_arr
// размер массива - мало - 100 строк
$arr = array_map("trim", file('arr.txt'));
// в этом массиве ищем вхождения с массива $arr
// размер массива 23 Мб - 600 тыс. строк
$in_arr = array_map("trim", file('in_arr.txt'));
// искаем
for($i=0;$i<100;$i++)
{
if(!in_array($arr[$i], $in_arr)) // строка НЕ найдена
{
$out[] = $arr[$i];
}
else // строка найдена (значит дубль)
{
$out_duble[] = $arr[$i];
}
}
// печатаем дубли
print_r($out_duble);
// обработка 100 строк длилась ~ 5 сек.
?>
Писал сам, все работает но только медленно.
В примере я использовал поиск 100 строк что заняло 5 сек. времени. В реальности нужно прогнать 1 млн. строк. С использованием такого алгоритма поиска 1 млн. строк будет проверяться неделю. (машина у меня не самая слабая)
Может кто знает более быстрый алгоритм? Спасибо.