Почему php скрипт зависает после 10к итераций?
Потому что вы написали мягко говоря говнокод, который сжирает всю память. Спросить 10к результатов и записать их все в один массив очень плохая идея. Убираете сохранение промежуточного результата, функция просто возвращает true/false и вызывается 10к раз, или 100к. А в нашем случае вызывается функция в которую передается огромный массив и возвращается еще более огромный массив.
время выполнения скрипта тоже ограничено