Lucrul cu PHP Arrays în modul corect

În acest tutorial, voi face o listă de funcții comune de array PHP cu exemple de utilizare și cele mai bune practici. Fiecare dezvoltator PHP trebuie să știe cum să le folosească și cum să combine funcțiile de matrice pentru a face codul lizibil și scurt.

De asemenea, există o prezentare cu exemple de cod date, astfel încât să o puteți descărca de pe link-urile aferente și să le arătați colegilor dvs. pentru a construi o echipă mai puternică.

Cele elementare

Să începem cu funcțiile de bază care funcționează cu chei și valori de matrice. Una dintre ele este array_combine (), care creează o matrice utilizând un tablou pentru chei și un altul pentru valorile sale:

$ keys = ['cer', 'iarbă', 'portocaliu']; $ valori = ['albastru', 'verde', 'portocaliu']; $ array = array_combine ($ chei, valori $); print_r ($ array); // Array // (// [cer] => albastru // [iarba] ​​=> verde // [portocaliu] => portocaliu //) 

Trebuie să știți că funcția array_values ​​() returnează o matrice indexată de valori, array_keys () returnează o matrice de chei dintr-o matrice dată și array_flip () schimbă cheile cu valori:

print_r (array_keys ($ array)); // ['cer', 'iarbă', 'portocaliu'] print_r (array_values ​​($ array)); // ['albastru', 'verde', 'portocaliu'] print_r (array_flip ($ array)); // Array // (// [albastru] => cer // [verde] => iarbă // [portocaliu] => portocaliu //)

Asigurați-vă că codul dvs. este mai scurt

Lista de funcții (), care nu este într-adevăr o funcție, ci o construcție a limbajului, este concepută pentru a atribui variabilele în scurt timp. De exemplu, aici este un exemplu de bază pentru utilizarea listă() funcţie:

// define array $ array = ['a', 'b', 'c']; // fără listă () $ a = $ array [0]; $ b = $ array [1]; $ c = $ matrice [2]; // cu lista () lista ($ a, $ b, $ c) = $ array;

Această construcție funcționează perfect cu funcții cum ar fi preg_slit () sau  exploda() . De asemenea, puteți ignora anumiți parametri, dacă nu aveți nevoie să fie definiți:

$ string = 'salut` lumea sălbatică'; listă ($ hello,, $ world) = explode ('|', $ string); ecou ("$ hello, $ world"); // Salut Lume

De asemenea, listă() pot fi utilizate cu pentru fiecare, ceea ce face ca această construcție să fie și mai bună:

$ arrays = [[1, 2], [3, 4], [5, 6]]; foreach ($ matrice ca listă ($ a, $ b)) $ c = $ a + $ b; ecou ($ c. ','); // 3, 7, 11,

Cu funcția extract (), puteți exporta o matrice asociativă la variabile. Pentru fiecare element dintr-o matrice, va fi creată o variabilă cu numele unei chei și a unei valori ca valoare a elementului:

$ array = ['haine' => 'tricou', 'dimensiune' => 'mediu', 'culoare' => 'albastru',]; extract ($ array); ecou ("$ haine $ dimensiune $ culoare"); // tricou medie albastru

Fiți conștienți de asta extrage() nu este sigur dacă lucrați cu datele utilizatorului (ca rezultatele cererilor), deci este mai bine să folosiți această funcție cu steagurile EXTR_IF_EXISTS și EXTR_PREFIX_ALL.

Opusul funcției anterioare este funcția compact (), care face o matrice asociativă din variabile:

$ haine = "tricou"; $ size = 'mediu'; $ color = 'albastru'; $ array = compact ("haine", "dimensiune", "culoare"); print_r ($ array); // Array // (// [haine] => tricou // [size] => mediu // [color] => albastru //)

Filtrarea funcțiilor

Există o funcție excelentă pentru filtrarea array-ului și se numește array_filter (). Treceți matricea ca prima paramă și o funcție anonimă ca al doilea param. Întoarcere Adevărat într - o funcție de apel invers dacă doriți să lăsați acest element în matrice și fals dacă nu:

$ numere = [20, -3, 50, -99, 55]; $ pozitiv = array_filter ($ numere, funcție (număr $) return $ number> 0;); print_r ($ pozitiv); // [0 => 20, 2 => 50, 4 => 55] 

Există o modalitate de a filtra nu numai valorile. Poți să folosești ARRAY_FILTER_USE_KEY sau ARRAY_FILTER_USE_BOTH ca al treilea parametru pentru a trece cheia sau ambele valori și tasta la funcția de apel invers.

De asemenea, puteți apela array_filter () fără apel invers pentru a elimina toate valorile goale:

$ numere = [-1, 0, 1]; $ not_empty = array_filter ($ numere); print_r ($ not_empty); // [0 => 1, 2 => 1]

Puteți obține numai valori unice dintr-o matrice utilizând funcția array_unique (). Observați că funcția va păstra cheile primelor elemente unice:

$ array = [1, 1, 1, 1, 2, 2, 3, 4, 5, 5]; $ uniques = array_unique ($ array); print_r ($ unicate); // Array // (// [0] => 1 // [4] => 2 // [7] => 3 // [8] => 4 // [9] 

Cu array_column (), puteți obține o listă a valorilor coloanelor dintr-o matrice multidimensională, cum ar fi un răspuns dintr-o bază de date SQL sau o importare dintr-un fișier CSV. Doar treceți un nume de matrice și de coloană:

$ 'array =' ['id' => 1, 'title' => 'tree'], '=>' cloud ']]; $ id = array_column ($ array, 'id'); print_r ($ id-uri); // [1, 2, 3] 

Pornind de la PHP 7, array_column () devine și mai puternic, pentru că acum este permis să lucreze cu o serie de obiecte. Deci, lucrul cu o serie de modele a devenit mai ușor:

$ cinemas = Cinema :: găsi () -> toate (); $ cinema_ids = array_column ($ cinemas, 'id'); // php7 pentru totdeauna!

Mergând prin Arrays

Folosind array_map (), puteți aplica un apel invers la fiecare element dintr-un matrice. Puteți trece un nume de funcție sau o funcție anonimă pentru a obține o matrice nouă bazată pe matricea dată:

$ cities = ['Berlin', 'KYIV', 'Amsterdam', 'Riga']; $ aliasuri = array_map ('strtolower', $ cities); print_r ($ pseudonime); // ['berlin', 'kyiv,' amsterdam ',' riga '] $ num = [1, -2, 3, -4, 5]; $ squares = array_map (funcție (număr $) return $ number ** 2;, numere $); print_r ($ pătrate); // [1, 4, 9, 16, 25]

Există un mit că nu există nici o modalitate de a trece valori și chei ale unui matrice la un apel invers, dar îl putem busta:

$ model = ['id' => 7, 'name' => 'James']; $ callback = funcție ($ cheie, valoare $) retur "$ cheie este valoarea $"; ; $ res = array_map (apel invers, array_keys ($ model), $ model); print_r ($ res); // Array // (// [0] => id este 7 // [1] => numele este James //)

Dar asta pare murdar. Este mai bine să utilizați în schimb array_walk (). Această funcție arată la fel ca și array_map (), dar funcționează diferit. Mai întâi de toate, o matrice este trecută printr-o referință, deci array_walk () nu creează o matrice nouă, ci modifică o matrice dată. Deci, ca o matrice sursă, puteți trece valoarea matricei printr-o referință într-un apel invers. Cheile array pot fi, de asemenea, transmise cu ușurință:

$ fruits = ['banana' => 'galben', 'apple' => 'verde', 'portocaliu' => 'portocaliu',]; array_walk ($ fruits, function (valoare $, cheie $) $ value = "$ cheie este valoarea $";); print_r ($ fructe); // Array // (// [banana] => banana este galben // [apple] => marul este verde // [orange] => portocaliu este portocaliu //)

Alăturați-vă la Arrays

Cea mai bună modalitate de a fuziona două sau mai multe matrice în PHP este de a folosi funcția array_merge (). Elementele de tablouri vor fi îmbinate împreună, iar valorile cu aceleași chei de șir vor fi suprascrise cu ultima valoare:

$ array1 = ['a' => 'a', 'b' => 'b', 'c' => 'c']; $ array2 = ['a' => 'A', 'b' => 'B', 'D' => 'D']; $ merge = array_merge ($ array1, $ array2); print_r ($ îmbinare); // Array // (// [a] => A // [b] => B // [c] => c // [D] => D //) 

Pentru a elimina valorile matricei dintr-o altă matrice (sau matrice), utilizați array_diff (). Pentru a obține valorile care sunt prezente în matrice date, utilizați array_intersect (). Următoarele exemple vor arăta cum funcționează:

$ array1 = [1, 2, 3, 4]; $ array2 = [3, 4, 5, 6]; $ diff = array_diff ($ array1, $ array2); print_r ($ dif); // [0 => 1, 1 => 2] $ intersect = array_intersect ($ array1, $ array2); print_r ($ se intersectează); // [2 => 3, 3 => 4]

Faceți valorile matematice cu matrice

Utilizați array_sum () pentru a obține o sumă de valori pentru array, array_product () pentru a le multiplica sau pentru a crea propria formulă cu array_reduce ():

$ numere = [1, 2, 3, 4, 5]; echo (array_sum (numere $)); // 15 echo (array_product ($ numere)); // 120 echo (array_reduce ($ numar, functie ($ carry, $ item) retur $ carry? $ Carry / $ item: 1;)); // 0.0083 = 1/2/3/4/5 

Pentru a contoriza toate valorile unei matrice, folosiți array_count_values ​​(). Va da toate valorile unice ale unei matrice date ca chei și un număr din aceste valori ca valoare:

$ things = ['apple', 'apple', 'banana', 'tree', 'tree', 'tree']; $ valori = array_count_values ​​($ lucruri); print_r ($ valori); // Array // (// [apple] => 2 // [banană] => 1 // [copac] => 3 //)

Generarea de tablouri

Pentru a genera o matrice cu o anumită dimensiune și aceeași valoare, utilizați array_fill ():

$ bind = array_fill (0, 5, '?'); print_r ($ bind); // ['?', '?', '?', '?', '?'] 

Pentru a genera o matrice cu un interval de chei și valori, cum ar fi orele de ore sau literele, utilizați interval ():

$ letters = interval ('a', 'z'); print_r ($ litere); // ['a', 'b', ..., 'z'] $ ore = interval (0, 23); print_r ($ ore); // [0, 1, 2, ..., 23]

Pentru a obține o parte dintr-o matrice - de exemplu, doar primele trei elemente - utilizați array_slice ():

$ numere = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; $ top = array_slice ($ numere, 0, 3); print_r ($ sus); // [1, 2, 3]

Sortarea matricelor

Este bine să ne amintim că fiecare funcție de sortare din PHP funcționează cu ajutorul unei referințe și se întoarce Adevărat pe succes sau fals pe eșec. Există o funcție de sortare de bază numită sort () și sortează valorile în ordine ascendentă fără păstrarea cheilor. Funcția de sortare poate fi prefixată cu următoarele litere:

  • A, păstrați cheile de conservare
  • k, sortați după taste
  • r, sortați în ordine inversă / descendentă
  • u, sort cu o funcție de utilizator

Puteți vedea combinațiile acestor litere în următorul tabel:

A k r u
A asort
arsort uasort
k ksort krsort
r arsort krsort rsort
u uasort
usort

Combinarea funcțiilor de array ca un șef

Magia reală începe atunci când începeți să combinați funcțiile matricei. Iată cum puteți elimina și elimina valorile goale într-o singură linie de cod cu array_filter () și array_map ():

$ values ​​= ['say', 'bye', ',' to ',' spații ',']; $ words = array_filter (array_map ('trim', valori $)); print_r ($ cuvinte); // ['spune', 'pa', 'la', 'spații']

Pentru a crea un id pe o hartă de titlu dintr-o serie de modele, putem folosi o combinație de array_combine () și array_column ():

$ modele = [$ model1, $ model2, $ model3]; $ id_to_title = array_combine (array_column ($ modele, 'id'), array_column ($ modele, 'title'));

Pentru a obține primele trei valori ale unei matrice, putem folosi array_count_values ​​(), arsort (), și array_slice ():

literele $ = = 'a', 'a', 'a', 'a', 'b', 'b', 'c', 'd', d, d, d „]; $ valori = array_count_values ​​($ litere); // obține cheia pentru a număra arsort array (valori $); // sort descrescător cheia de conservare $ top = array_slice (valori $, 0, 3); // obține top 3 print_r ($ top); // Array // (// [d] => 5 // [a] => 4 // [b] => 2 //)

Este ușor de utilizat array_sum () și array_map () pentru a calcula suma comenzii în câteva rânduri:

$ '=' ['product_id' => 1, 'prețul' => 99, 'count' => 1], ['product_id' => ['product_id' => 2, 'prețul' => 17, 'count' => 3],]; $ sum = array_sum (array_map (funcție ($ product_row) return $ product_row ['price'] * $ product_row ['count'];, comanda $)); print_r ($ sum); // 250

Concluzie

După cum puteți vedea, cunoașterea funcțiilor principale ale matricei poate face codul mult mai scurt și mai ușor de citit. Desigur, PHP are mai multe funcții de array și chiar și funcțiile date au multe variații de utilizat cu parametri și steaguri suplimentare, dar cred că în acest tutorial am abordat elementele de bază pe care fiecare dezvoltator PHP ar trebui să le cunoască.

Rețineți că am creat o prezentare cu exemplele date, astfel încât să o puteți descărca de pe link-urile aferente și să le arătați echipei dvs..

Dacă aveți întrebări, nu ezitați să le întrebați în comentariile articolului. 

Citirea ulterioară și legăturile apropiate

  • Arrays Manual pe php.net
  • Funcții anonime (închideri) pe php.net
  • Descărcați o prezentare pentru echipa dvs.
Cod