обработка больших массивов с помощью array_diff

Я пытаюсь сравнить два массива. Использование array_intersect не представляет проблем. При использовании array_diff и массивов с ~ 5000 значениями он работает. Когда я получаю до ~ 10000 значений, скрипт умирает, когда я получаю array_diff. Включение error_reporting ничего не привело.

Я попытался создать свою собственную функцию array_diff:

function manual_array_diff($arraya, $arrayb) { foreach ($arraya as $keya => $valuea) { if (in_array($valuea, $arrayb)) { unset($arraya[$keya]); } } return $arraya; } 

source: Как работает array_diff?

Я ожидал бы, что он будет менее эффективным, чем официальный массив_дифф, но он может обрабатывать массивы размером ~ 10 000. К сожалению, оба array_diffs терпят неудачу, когда я добираюсь до ~ 15 000.

Я пробовал один и тот же код на другой машине, и он работает нормально, поэтому это не проблема с кодом или PHP. На этом конкретном сервере должен быть установлен некоторый предел. Любая идея, как я могу обойти этот предел или изменить его или просто узнать, что это такое?

Встретив ту же самую проблему, я действительно надеялся на ответ здесь.

Итак, я должен был найти свой собственный путь вокруг него и придумал следующий уродливый kludge, который работает для меня с массивами около 50 000 элементов. Это основано на вашем наблюдении, что array_intersect работает, но array_diff этого не делает.

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

 function new_array_diff($arraya, $arrayb) { $intersection = array_intersect($arraya, $arrayb); foreach ($arraya as $keya => $valuea) { if (!isset($intersection[$keya])) { $diff[$keya] = $valuea; } } return $diff; } 

В моем php.ini:

 max_execution_time = 60 ; Maximum execution time of each script, in seconds memory_limit = 32M ; Maximum amount of memory a script may consume 

Могут ли отличия в этих настройках или, альтернативно, в производительности машины вызвать проблемы? Вы проверяли журналы ошибок веб-сервера (если вы запускаете это через один)?

Вы упомянули, что это работает в браузере. Попробуйте запустить скрипт через командную строку и посмотреть, отличается ли результат.