Lavorare con gli array PHP nel modo giusto

In questo tutorial, ho intenzione di creare un elenco di funzioni di array PHP comuni con esempi di utilizzo e best practice. Ogni sviluppatore PHP deve sapere come usarli e come combinare le funzioni degli array per rendere il codice leggibile e breve.

Inoltre, c'è una presentazione con esempi di codice, quindi puoi scaricarla dai link correlati e mostrarla ai tuoi colleghi per costruire una squadra più forte.

Le basi

Iniziamo con le funzioni di base che funzionano con chiavi e valori di array. Uno di questi è array_combine (), che crea un array usando un array per le chiavi e un altro per i suoi valori:

$ keys = ['sky', 'grass', 'orange']; $ values ​​= ['blue', 'green', 'orange']; $ array = array_combine ($ keys, $ values); print_r ($ array); // Array // (// [sky] => blue // [grass] => green // [orange] => orange //) 

Dovresti sapere che la funzione array_values ​​() restituisce una matrice indicizzata di valori, array_keys () restituisce un array di chiavi di un determinato array e array_flip () scambia chiavi con valori:

print_r (array_keys ($ array)); // ['sky', 'grass', 'orange'] print_r (array_values ​​($ array)); // ['blue', 'green', 'orange'] print_r (array_flip ($ array)); // Array // (// [blue] => sky // [green] => grass // [orange] => orange //)

Rendi il tuo codice più breve

La funzione list (), che non è propriamente una funzione, ma una costruzione del linguaggio, è progettata per assegnare variabili in modo breve. Ad esempio, ecco un esempio di base dell'utilizzo di elenco() funzione:

// define array $ array = ['a', 'b', 'c']; // senza lista () $ a = $ array [0]; $ b = $ array [1]; $ c = $ array [2]; // con lista () lista ($ a, $ b, $ c) = $ array;

Questa costruzione funziona perfettamente con funzioni come preg_slit () o  esplodere() . Inoltre, puoi saltare alcuni parametri, se non hai bisogno che siano definiti:

$ string = 'ciao | selvaggio | mondo'; lista ($ ciao, $ world) = esplode ('|', $ stringa); echo ("$ ciao, $ mondo"); // Ciao mondo

Anche, elenco() può essere usato con per ciascuno, che rende questa costruzione ancora migliore:

$ array = [[1, 2], [3, 4], [5, 6]]; foreach ($ array come lista ($ a, $ b)) $ c = $ a + $ b; echo ($ c. ','); // 3, 7, 11,

Con la funzione extract (), è possibile esportare un array associativo in variabili. Per ogni elemento di un array, verrà creata una variabile con il nome di una chiave e il valore come valore dell'elemento:

$ array = ['clothes' => 't-shirt', 'size' => 'medium', 'color' => 'blue',]; estrarre ($ array); echo ("$ clothes $ size $ color"); // t-shirt blu medio

Fai attenzione a estratto() non è sicuro se stai lavorando con dati utente (come i risultati delle richieste), quindi è meglio usare questa funzione con i flag EXTR_IF_EXISTS e EXTR_PREFIX_ALL.

L'opposto della funzione precedente è la funzione compact (), che rende un array associativo dalle variabili:

$ vestiti = 't-shirt'; $ size = 'medio'; $ color = 'blue'; $ array = compact ('clothes', 'size', 'color'); print_r ($ array); // Array // (// [clothes] => t-shirt // [size] => medium // [color] => blue //)

Funzioni di filtraggio

C'è una grande funzione per il filtraggio degli array, ed è chiamata array_filter (). Passa la matrice come primo parametro e una funzione anonima come secondo parametro. Ritorno vero in una funzione di callback se si desidera lasciare questo elemento nell'array e falso se non lo fai:

$ numeri = [20, -3, 50, -99, 55]; $ positivo = array_filter ($ numeri, funzione (numero $) return $ number> 0;); print_r ($ positivo); // [0 => 20, 2 => 50, 4 => 55] 

C'è un modo per filtrare non solo i valori. Puoi usare ARRAY_FILTER_USE_KEYARRAY_FILTER_USE_BOTH come terzo parametro per passare la chiave o sia valore che chiave alla funzione di callback.

Inoltre, puoi chiamare array_filter () senza un callback per rimuovere tutti i valori vuoti:

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

È possibile ottenere solo valori univoci da un array usando la funzione array_unique (). Si noti che la funzione manterrà le chiavi dei primi elementi univoci:

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

Con array_column (), è possibile ottenere un elenco di valori di colonna da una matrice multidimensionale, ad esempio una risposta da un database SQL o un'importazione da un file CSV. Basta passare un nome di matrice e colonna:

$ array = [['id' => 1, 'titolo' => 'albero'], ['id' => 2, 'titolo' => 'sole'], ['id' => 3, 'titolo '=>' cloud '],]; $ ids = array_column ($ array, 'id'); print_r ($ id); // [1, 2, 3] 

A partire da PHP 7, array_column () diventa ancora più potente, perché ora è consentito lavorare con una serie di oggetti. Quindi, lavorare con una serie di modelli è diventato più semplice:

$ cinemas = Cinema :: find () -> all (); $ cinema_ids = array_column ($ cinema, 'id'); // php7 per sempre!

Camminando attraverso gli array

Usando array_map (), puoi applicare un callback a ogni elemento di un array. È possibile passare un nome di funzione o una funzione anonima per ottenere un nuovo array in base alla matrice specificata:

$ cities = ['Berlin', 'KYIV', 'Amsterdam', 'Riga']; $ alias = array_map ('strtolower', $ cities); print_r ($ alias); // ['berlin', 'kyiv,' amsterdam ',' riga '] $ numbers = [1, -2, 3, -4, 5]; $ squares = array_map (function ($ number) return $ number ** 2;, $ numbers); print_r ($ quadrati); // [1, 4, 9, 16, 25]

C'è un mito che non c'è modo di passare valori e chiavi di un array a un callback, ma possiamo farlo fuori:

$ model = ['id' => 7, 'name' => 'James']; $ callback = function ($ key, $ value) return "$ key is $ value"; ; $ res = array_map ($ callback, array_keys ($ model), $ model); print_r ($ res); // Array // (// [0] => id è 7 // [1] => nome è James //)

Ma questo sembra sporco. È preferibile utilizzare array_walk (). Questa funzione ha lo stesso aspetto di array_map (), ma funziona diversamente. Prima di tutto, un array viene passato da un riferimento, quindi array_walk () non crea una nuova matrice, ma cambia una data matrice. Pertanto, come array di origine, è possibile passare il valore dell'array mediante un riferimento in un callback. Le chiavi di array possono anche essere passate facilmente:

$ fruits = ['banana' => 'giallo', 'mela' => 'verde', 'arancione' => 'arancione',]; array_walk ($ fruits, function (& $ value, $ key) $ value = "$ key is $ value";); print_r ($ frutti); // Array // (// [banana] => banana è gialla // [mela] => mela è verde // [arancia] => arancione è arancione //)

Unirsi agli array

Il modo migliore per unire due o più array in PHP è utilizzare la funzione array_merge (). Gli elementi degli array verranno uniti insieme e i valori con le stesse chiavi stringa verranno sovrascritti con l'ultimo valore:

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

Per rimuovere i valori dell'array da un altro array (o array), utilizzare array_diff (). Per ottenere valori presenti in determinati array, utilizzare array_intersect (). I prossimi esempi mostreranno come funziona:

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

Fai il Math con i valori dell'array

Usa array_sum () per ottenere una somma di valori di matrice, array_product () per moltiplicarli o creare la tua formula con array_reduce ():

$ numeri = [1, 2, 3, 4, 5]; echo (array_sum ($ numeri)); // 15 echo (array_product ($ numbers)); // 120 echo (array_reduce ($ numbers, function ($ carry, $ item) return $ carry? $ Carry / $ item: 1;)); // 0,0083 = 1/2/3/4/5 

Per contare tutti i valori di un array, usa array_count_values ​​(). Fornirà tutti i valori univoci di un determinato array come chiavi e un conteggio di questi valori come valore:

$ cose = ['mela', 'mela', 'banana', 'albero', 'albero', 'albero']; $ values ​​= array_count_values ​​($ things); print_r ($ valori); // Array // (// [apple] => 2 // [banana] => 1 // [albero] => 3 //)

Generazione di matrici

Per generare una matrice con una determinata dimensione e lo stesso valore, utilizzare array_fill ():

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

Per generare una matrice con un intervallo di chiavi e valori, come le ore del giorno o le lettere, usare range ():

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

Per ottenere una parte di un array, ad esempio, solo i primi tre elementi, usa array_slice ():

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

Ordinamento di matrici

È bene ricordare che ogni funzione di ordinamento in PHP lavora con array per riferimento e restituisce vero su successo o falso in caso di fallimento. Esiste una funzione di ordinamento di base chiamata sort () e ordina i valori in ordine crescente senza conservare le chiavi. La funzione di ordinamento può essere preceduta dalle seguenti lettere:

  • un, ordina le chiavi di conservazione
  • K, ordina per chiavi
  • r, ordina in ordine decrescente / decrescente
  • u, ordinare con una funzione utente

Puoi vedere le combinazioni di queste lettere nella seguente tabella:

un K r u
un asort
arsort uasort
K ksort krsort
r arsort krsort rsort
u uasort
usort

Combinare le funzioni di array come un boss

La vera magia inizia quando inizi a combinare le funzioni degli array. Ecco come puoi tagliare e rimuovere valori vuoti con una sola riga di codice array_filter () e array_map ():

$ values ​​= ['say', 'bye', ", 'to', 'spaces',"]; $ words = array_filter (array_map ('trim', $ values)); print_r ($ parole); // ['say', 'bye', 'to', 'spaces']

Per creare un ID per una mappa del titolo da una serie di modelli, possiamo utilizzare una combinazione di array_combine () e array_column ():

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

Per ottenere i primi tre valori di un array, possiamo usare array_count_values ​​(), arsort (), e array_slice ():

$ letters = ['a', 'a', 'a', 'a', 'b', 'b', 'c', 'd', 'd', 'd', 'd', 'd ']; $ values ​​= array_count_values ​​($ letters); // ottiene la chiave per contare l'array arsort ($ values); // ordina la chiave preservante decrescente $ top = array_slice ($ values, 0, 3); // ottenere i primi 3 print_r ($ top); // Array // (// [d] => 5 // [a] => 4 // [b] => 2 //)

È facile da usare array_sum () e array_map () per calcolare la somma dell'ordine in poche righe:

$ order = [['product_id' => 1, 'price' => 99, 'count' => 1], ['product_id' => 2, 'price' => 50, 'count' => 2], ['product_id' => 2, 'price' => 17, 'count' => 3],]; $ sum = array_sum (array_map (function ($ product_row) return $ product_row ['price'] * $ product_row ['count'];, $ order)); print_r ($ sum); // 250

Conclusione

Come puoi vedere, la conoscenza delle principali funzioni dell'array può rendere il tuo codice molto più breve e più leggibile. Naturalmente, PHP ha molte più funzioni di array, e anche le funzioni date hanno molte varianti da usare con parametri e flag aggiuntivi, ma penso che in questo tutorial abbiamo coperto le basi che ogni sviluppatore PHP dovrebbe conoscere.

Tieni presente che ho creato una presentazione con gli esempi forniti, quindi puoi scaricarla dai link correlati e mostrarla alla tua squadra.

Se avete domande, non esitate a chiedere loro nei commenti all'articolo. 

Ulteriori letture e collegamenti correlati

  • Array Manuale su php.net
  • Funzioni anonime (chiusure) su php.net
  • Scarica una presentazione per la tua squadra