[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: in_array в большом массиве
unnamed
Здравствуйте!
Сразу код.

<?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 млн. строк будет проверяться неделю. (машина у меня не самая слабая)
Может кто знает более быстрый алгоритм? Спасибо.
I++
можно попробовать функцию http://www.php.net/manual/ru/function.array-intersect.php
Invis1ble
$data = array_unique(array_map("trim", file('arr.txt') + file('in_arr.txt')));

а если дубли нужно найти, то вместо array_unique() юзать array_intersect()

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

unnamed
<?php

// массив с которого нужно удалить ключи которые присутствуют в массиве $in_arr
// размер массива - мало - 100 строк

$arr = array_map("trim", file('arr.txt'));


// в этом массиве ищем вхождения с массива $arr
// размер массива 23 Мб - 600 тыс. строк

$in_arr = array_map("trim", file('in_arr.txt'));



$result = array_intersect($arr, $in_arr);

// печатаем дубли
print_r($result);


Спасибо все работает!

$data = array_unique(array_map("trim", file('arr.txt') + file('in_arr.txt')));

Этот пример сработает (и сработал) некоректно. array_unique() удалит только одну из двух одинаковых строк для того что бы это работало array_unique() должен удалять все дублирующиеся строки (с двух одинаковых строк должно остаться ноль)
Invis1ble
unnamed
ты не написал в первопосте, что конкретно ты хочешь сделать, я предположил, что удалить дубли. Что делает array_unique я в курсе.

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.