Próbowałem porównać dwie tablice. Korzystanie z array_intersect nie przedstawia żadnych problemów. Gdy używasz array_diff i tablic z ~ 5000 wartości, to działa. Kiedy osiągam ~ 10.000 wartości, skrypt umiera, gdy dojdę do array_diff. Włączenie funkcji zgłaszania błędów nie spowodowało niczego.obsługa dużych tablic z array_diff
Próbowałem tworzyć własną funkcję array_diff:
function manual_array_diff($arraya, $arrayb) {
foreach ($arraya as $keya => $valuea) {
if (in_array($valuea, $arrayb)) {
unset($arraya[$keya]);
}
}
return $arraya;
}
źródło: How does array_diff work?
Spodziewam się, że jest mniej wydajny niż oficjalny array_diff, ale może obsłużyć tablice ~ 10000. Niestety, oba array_diffs zawodzą, gdy dojdę do ~ 15,000.
Próbowałem tego samego kodu na innym komputerze i działa dobrze, więc nie jest to problem z kodem lub PHP. Musi być jakiś limit ustawiony gdzieś na tym konkretnym serwerze. Masz pomysł, jak obejść ten limit, zmienić go lub po prostu dowiedzieć się, co to jest?
Z jakimi danymi testowałeś? – Gumbo
Prawdopodobnie dlatego, że ten algorytm to O (N^2). – kennytm
Czy używasz tego w przeglądarce lub wierszu poleceń? – tipu