Verificarea rapidă a Php a prezenței unei valori într-o matrice mare

Există constant o sarcină de verificare a prezenței valorii într-o matrice. În PHP pentru acest scop, folosiți adesea funcția in_array care are două argumente: valoarea (sau matricea de valori) și matricea în care va fi efectuată căutarea. Dacă se găsește, funcția returnează adevărat. altfel fals.







Descrierea problemei

În timp ce valorile din matrice sunt mici, totul funcționează rapid. Dar, de îndată ce matricea crește la 10 000 - 20 000 de elemente, începe problemele.

Unul dintre scripturile mele trebuia să verifice elementele de unicitate, nu am putut să o fac cu ajutorul bazei de date; Matricea a fost modificată de câteva ori de la solicitarea la baza de date. Numai elementele id numerice au fost stocate în matrice (acest lucru este util pentru rezolvare). La un moment dat, elementele au devenit mai mult de 60.000, iar scenariul a început să funcționeze timp de 20-30 de secunde. pe gazda locală, care este extrem de lentă.







O măsurare simplă a duratei de execuție a secțiunilor de cod (utilizând funcția microtime ()) că problema este in_array.

adresare

Dacă vă gândiți la asta, atunci iterați de-a lungul întregii matrice de fiecare dată pentru a verifica existența unui element în ea este prostie. Este mult mai ușor să verificăm existența unui element particular al matricei, fără a trece prin restul valorilor. Pentru a face acest lucru, trebuie să utilizați o matrice a cheii de formular (ID element) => o anumită valoare (de exemplu, adevărată) în locul unei matrice a cheii de formă => value (element ID).

În acest caz, pentru a testa existența unui element într-o matrice, este suficient să folosiți funcția isset (). în care trebuie să treci o variabilă a formularului $ array_name [ID-ul elementului].

După trecerea la această metodă de verificare, scenariul a început să funcționeze timp de 1,2 secunde, ceea ce este normal.

Cu sinceritatea ta. =)







Articole similare

Trimiteți-le prietenilor: