![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 223 Pomógł: 27 Dołączył: 16.04.2008 Skąd: Bakutilu Ostrzeżenie: (0%) ![]() ![]() |
Mam 2 tablice:
1.
2.
Chce porównać obie tablice tak aby zwróciło wszystkie numery z tablicy 1 których nie ma w tablicy 2. Próbowałem z array_diff_assoc ale nie działa. Robiłem też w pętli foreach ale skrypt przerywa działanie i nie wywala żadnego błędu. I co najważniejsze w tablicy nr 1 jest ponad 80 000 kluczy (razy 2 [Knt_Telefon1] i [Knt_Telefon2]) oraz w tablicy nr 2 jest około 70 000 rekordów. Da się to jakoś optymalnie rozegrać? Ten post edytował styryl 24.10.2011, 13:06:27 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 61 Dołączył: 20.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Wyszukiwanie różnic w dwóch tablicach po ~100 000 elementów nie powinno trwać aż tak długo, żeby można było powiedzieć "póki co się mieli". Żeby przyspieszyć działanie takiego skryptu trzeba zastosować hashtablice (wyszukiwanie elementów w hashtablicy jest znacznie szybsze, niż porównywanie po kolei n elementów zwykłej tablicy). Jako że w PHP tablice asocjacyjne mogą być traktowane jako hashtablice, to kod jest bardzo prosty. W praktyce sprowadza się do tego, co pokazali CuteOne i Sephirus, tyle że klucze tablic zamienione są z wartościami:
Wygenerowałem sobie tablice 1 i 2 zawierające odpowiednio 70 000 i 80 000 elementów (za telefony przyjąłem wartości losowe z zakresu 320000000 - 329999999) i powyższy kod wykonuje się u mnie w 0.75 sekundy i zajmuje w szczytowym momencie niecałe 80MB pamięci. PS. Jeśli ma się to wykonywać raz, lub raz na tydzień jakoś w nocy, to faktycznie nie trzeba się przejmować wydajnością. W przeciwnym wypadku warto się nad tym zastanowić, bo wzrost wydajności jest znaczny. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.10.2025 - 02:19 |