|
|
|
| Имеются 2 массива. Они очень большие. В одном хранится 20 000 элементов, в другом 16 000.
$files = array(20000);
$links = array(16000);
|
Задача: Каждый элемент массива $files нужно сравнить со всеми элементами массива $links. Т.е нужно найти все элементы массива $files которые отсутствуют в массиве $links
Данную задачу я выполнил. Но выходит фатальная ошибка
Fatal error: Maximum execution time of 30 seconds exceeded
|
Если брать размерность меньше до 5000, все работает прекрасно. Даже не знаю что и делать.
Я даже переписал скрипт таким образом, чтобы сравнение элементов происходило поэтапно. Сравнивал элементы массивов с шагом например в 100 элементов (шаг сравнения можно самому задавать), но и это не помогло
Как можно решить проблему? Если что могу кинуть сам скрипт
P.S необходимость в больших массивах необходима. В массив $files я забиваю все файлы, которые хранятся на фтп. В $links накапливаются нужные мне данные из БД | |
|
|
|
|
|
|
|
для: Sl
(26.11.2008 в 10:29)
| | А как вы их сравнивали? | |
|
|
|
|
|
|
|
для: sim5
(26.11.2008 в 10:31)
| | Каждый элемент массива $files сравнивается со всеми элементами массива $links. Если элемент найден обрываем цикл, если же нет ищем дальше по циклу. Сравнение происходит частями. Сначала сравниваются например 100 элементов массива потом от 100 до 200 и т.д. | |
|
|
|
|
|
|
|
для: Sl
(26.11.2008 в 10:37)
| | Не пробовал такие громадные массивы гонять, но, вы пробовали стандартными функциями РНР производить сравнение? | |
|
|
|
|
|
|
|
для: sim5
(26.11.2008 в 10:43)
| | Пытался с foreach - безнадежно. Сам скрипт на for работает | |
|
|
|
|
|
|
|
для: Sl
(26.11.2008 в 10:45)
| | Да какой foreach!? Посмотрите функции работы с массивами, для сравнения их не одна функция имеется. | |
|
|
|
|
|
|
|
для: Sl
(26.11.2008 в 10:29)
| | увеличить время выполнения скрипта в файле php.ini или httpd.conf.
max_execution_time = [целое число] - указывает время в секундах | |
|
|
|
|
|
|
|
для: elenaki
(26.11.2008 в 10:37)
| | а что делать если я никак не могу изменить это значение. Скрипт будет работать на хостинге. В общем увеличить max_execution_time не получится никак
Может быть можно как-то в самом php-файле попробовать изменить? | |
|
|
|
|
|
|
|
для: Sl
(26.11.2008 в 10:40)
| | set_time_limit($time) | |
|
|
|
|
|
|
|
для: Sl
(26.11.2008 в 10:40)
| | Прислушайтесь к совету sim5. Используйте стандартные функции.
необходимость в больших массивах необходима
А мне кажется эту же задачу можно решать средствами СУБД поместив названия файлов с фтп в БД во временную таблицу. | |
|
|
|
|
|
|
|
для: Valick
(26.11.2008 в 10:49)
| | а какие можно функции стандартные использовать при сравнении не подскажите? | |
|
|
|
|
|
|
|
|
для: sim5
(26.11.2008 в 10:54)
| | спасибо, буду думать | |
|
|
|
|
|
|
|
для: Sl
(26.11.2008 в 10:58)
| | если элементы $files держать в ключах, а не в значениях, достаточно одного прохода по $links (или даже по его источнику, без создания самого массива $links)
Задача решится достаточно быстро. | |
|
|
|