I denne opplæringen skal jeg lage en liste over vanlige PHP-arrayfunksjoner med eksempler på bruk og beste praksis. Hver PHP-utvikler må vite hvordan man bruker dem og hvordan man kombinerer arrayfunksjoner for å gjøre koden lesbar og kort.
Det er også en presentasjon med gitt kodeeksempler, slik at du kan laste den ned fra de relaterte koblingene og vise det til dine kolleger for å bygge et sterkere lag.
La oss starte med de grunnleggende funksjonene som fungerer med array nøkler og verdier. En av dem er array_combine (), som lager en matrise ved hjelp av ett array for nøkler og en annen for sine verdier:
$ keys = ['sky', 'gress', 'orange']; $ values = ['blue', 'green', 'orange']; $ array = array_combine ($ keys, $ values); print_r ($ array); // Array // (// [sky] => blue // [grass] => green // [orange] => oransje //)
Du bør vite at funksjonen array_values () returnerer en indeksert rekkeverdier, array_keys () returnerer en rekke nøkler til et gitt array, og array_flip () utveksler nøkler med verdier:
print_r (array_keys ($ array)); // ['himmel', 'gress', 'oransje'] print_r (array_values ($ array)); // ['blue', 'green', 'orange'] print_r (array_flip ($ array)); // Array // (// [blue] => himmel // [green] => gress // [orange] => oransje //)
Funksjonslisten (), som egentlig ikke er en funksjon, men en språkkonstruksjon, er designet for å tilordne variabler på kort vei. For eksempel, her er et grunnleggende eksempel på bruk av liste()
funksjon:
// definer array $ array = ['a', 'b', 'c']; // uten liste () $ a = $ array [0]; $ b = $ array [1]; $ c = $ array [2]; // med liste () liste ($ a, $ b, $ c) = $ array;
Denne konstruksjonen fungerer perfekt med funksjoner som preg_slit ()
eller eksplodere()
. Du kan også hoppe over noen parametere, hvis du ikke trenger dem til å bli definert:
$ string = 'hei | vill | verden'; liste ($ hei,, $ verden) = eksplodere ('|', $ streng); ekko ("$ hei, $ verden"); // Hei Verden
Også, liste()
kan brukes med for hver
, noe som gjør denne konstruksjonen enda bedre:
$ arrays = [[1, 2], [3, 4], [5, 6]]; foreach ($ arrayer som liste ($ a, $ b)) $ c = $ a + $ b; ekko ($ c. ','); // 3, 7, 11,
Med ekstrakt () -funksjonen kan du eksportere et assosiativt array til variabler. For hvert element i en matrise vil en variabel bli opprettet med navnet på en nøkkel og verdi som en verdi av elementet:
$ array = ['clothes' => 't-skjorte', 'size' => 'medium', 'color' => 'blue',]; ekstrakt ($ array); ekko ("$ klær $ størrelse $ farge"); // t-skjorte medium blå
Vær klar over at ekstrakt()
er ikke trygt hvis du jobber med brukerdata (som resultat av forespørsler), så det er bedre å bruke denne funksjonen med flaggene EXTR_IF_EXISTS
og EXTR_PREFIX_ALL
.
Den motsatte av den forrige funksjonen er kompakt () -funksjonen, som gjør en assosiativ array fra variabler:
$ klær = 't-skjorte'; $ size = 'medium'; $ color = 'blue'; $ array = kompakt ('klær', 'størrelse', 'farge'); print_r ($ array); // Array // (// [clothes] => t-skjorte // [size] => medium // [color] => blue //)
Det er en flott funksjon for arrayfiltrering, og den kalles array_filter (). Pass arrayet som den første param og en anonym funksjon som den andre param. Komme tilbake ekte
i en tilbakeringingsfunksjon hvis du vil forlate dette elementet i matrisen, og falsk
hvis du ikke gjør det:
$ tall = [20, -3, 50, -99, 55]; $ positive = array_filter ($ tall, funksjon ($ nummer) return $ number> 0;); print_r ($ positiv); // [0 => 20, 2 => 50, 4 => 55]
Det er en måte å filtrere ikke bare av verdiene. Du kan bruke ARRAY_FILTER_USE_KEY
eller ARRAY_FILTER_USE_BOTH
som en tredje parameter for å sende nøkkelen eller både verdien og nøkkelen til tilbakeringingsfunksjonen.
Du kan også ringe array_filter ()
uten tilbakeringing for å fjerne alle tomme verdier:
$ tall = [-1, 0, 1]; $ not_empty = array_filter ($ tall); print_r ($ not_empty); // [0 => -1, 2 => 1]
Du kan bare få unike verdier fra en matrise ved hjelp av array_unique () -funksjonen. Legg merke til at funksjonen vil bevare nøklene til de første unike elementene:
$ array = [1, 1, 1, 1, 2, 2, 2, 3, 4, 5, 5]; $ uniques = array_unique ($ array); print_r ($ unike); // Array // (// [0] => 1 // [4] => 2 // [7] => 3 // [8] => 4 // [9] => 5 //)
Med array_column () kan du få en liste over kolonnverdier fra et flerdimensjonalt array, som et svar fra en SQL-database eller en import fra en CSV-fil. Bare passere en matrise og kolonne navn:
$ array = [['id' => 1, 'title' => 'tre'], ['id' => 2, 'title' => 'sol'], ['id' => 3 ' '=>' sky '],]; $ ids = array_column ($ array, 'id'); print_r ($ IDer); // [1, 2, 3]
Fra PHP 7, array_column ()
blir enda sterkere, fordi det nå er tillatt å jobbe med en rekke objekter. Så det ble lettere å jobbe med en rekke modeller:
$ cinemas = Cinema :: find () -> all (); $ cinema_ids = array_column ($ kinoer, 'id'); // php7 for alltid!
Ved å bruke array_map (), kan du bruke tilbakering til hvert element i en matrise. Du kan sende et funksjonsnavn eller anonym funksjon for å få et nytt utvalg basert på det angitte feltet:
$ byer = ['Berlin', 'KYIV', 'Amsterdam', 'Riga']; $ aliases = array_map ('strtolower', $ byer); print_r ($ aliaser); // ['berlin', 'kyiv,' amsterdam ',' riga '] $ tall = [1, -2, 3, -4, 5]; $ kvadrater = array_map (funksjon ($ nummer) return $ nummer ** 2;, $ tall); print_r ($ firkanter); // [1, 4, 9, 16, 25]
Det er en myte om at det ikke er mulig å overføre verdier og nøkler til en gruppe til tilbakeringing, men vi kan buste det:
$ model = ['id' => 7, 'navn' => 'James']; $ callback = funksjon ($ nøkkel, $ verdi) return "$ nøkkel er $ verdi"; ; $ res = array_map ($ tilbakeringing, array_keys ($ modell), $ modell); print_r ($ res); // Array // (// [0] => id er 7 // [1] => navnet er James //)
Men dette ser skitne ut. Det er bedre å bruke array_walk () i stedet. Denne funksjonen ser ut som den array_map ()
, men det virker annerledes. Først av alt, en matrise er bestått av en referanse, så array_walk ()
Oppretter ikke et nytt array, men endrer et gitt utvalg. Så som en kilde array, kan du passere arrayverdien med en referanse i en tilbakeringing. Array nøkler kan også sendes enkelt:
$ fruits = ['banana' => 'gul', 'apple' => 'grønt', 'oransje' => 'oransje']; array_walk ($ frukt, funksjon (& $ verdi, $ nøkkel) $ value = "$ key er $ value";); print_r ($ frukt); // Array // (// [banana] => banan er gul // [apple] => eple er grønt // [orange] => appelsin er oransje //)
Den beste måten å slå sammen to eller flere arrayer i PHP, er å bruke funksjonen array_merge (). Elementer av arrayer vil bli slått sammen, og verdier med de samme strengtastene vil bli overskrevet med den siste verdien:
$ array1 = ['a' => 'a', 'b' => 'b', 'c' => 'c']; $ array2 = ['a' => 'A', 'b' => 'B', 'D' => 'D']; $ fusjon = array_merge ($ array1, $ array2); print_r ($ merge); // Array // (// [a] => A // [b] => B // [c] => c // [D] => D //)
For å fjerne arrayverdier fra en annen array (eller arrayer), bruk array_diff (). For å få verdier som er tilstede i gitt arrays, bruk array_intersect (). De neste eksemplene viser hvordan det fungerer:
$ array1 = [1, 2, 3, 4]; $ array2 = [3, 4, 5, 6]; $ diff = array_diff ($ array1, $ array2); print_r ($ diff); // [0 => 1, 1 => 2] $ krysser = array_intersect ($ array1, $ array2); print_r ($ krysser); // [2 => 3, 3 => 4]
Bruk array_sum () for å få summen av arrayverdier, array_product () for å multiplisere dem, eller lag din egen formel med array_reduce ():
$ tall = [1, 2, 3, 4, 5]; echo (array_sum ($ tall)); // 15 echo (array_product ($ numbers)); // 120 echo (array_reduce ($ tall, funksjon ($ carry, $ item) return $ carry? $ Carry / $ item: 1;)); // 0.0083 = 1/2/3/4/5
For å telle alle verdiene i en matrise, bruk array_count_values (). Det vil gi alle unike verdier av et gitt array som nøkler og en telling av disse verdiene som en verdi:
$ things = ['apple', 'apple', 'banana', 'tree', 'tree', 'tree']; $ values = array_count_values ($ ting); print_r ($ verdier); // Array // (// [apple] => 2 // [banan] => 1 // [tre] => 3 //)
For å generere en matrise med en gitt størrelse og samme verdi, bruk array_fill ():
$ bind = array_fill (0, 5, '?'); print_r ($ bind); // ['?', '?', '?', '?', '?']
For å generere en matrise med en rekkevidde i nøkler og verdier, for eksempel dagtimer eller bokstaver, bruk rekkevidde ():
$ bokstaver = rekkevidde ('a', 'z'); print_r ($ bokstaver); // ['a', 'b', ..., 'z'] $ hours = rekkevidde (0, 23); print_r ($ timer); // [0, 1, 2, ..., 23]
For å få en del av en matrise, for eksempel, bare de tre første elementene - bruk array_slice ():
$ tall = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; $ top = array_slice ($ tall, 0, 3); print_r ($ øverst); // [1, 2, 3]
Det er godt å huske at hver sorteringsfunksjon i PHP fungerer med arrayer med referanse og retur ekte på suksess eller falsk på feil. Det er en grunnleggende sorteringsfunksjon som heter sort (), og det sorterer verdier i stigende rekkefølge uten å bevare nøklene. Sorteringsfunksjonen kan bli prepended med følgende bokstaver:
Du kan se kombinasjonene av disse bokstavene i følgende tabell:
en | k | r | u | |
en | asort | arsort | uasort | |
k | ksort | krsort | ||
r | arsort | krsort | rsort | |
u | uasort | usort |
Den virkelige magien begynner når du begynner å kombinere arrayfunksjoner. Slik kan du trimme og fjerne tomme verdier i bare en enkelt kode med array_filter ()
og array_map ()
:
$ values = ['say', 'bye', ',' to ',' spaces ', "]; $ words = array_filter (array_map ('trim', $ values)); print_r ($ ord); // ['si', 'bye', 'til', 'mellomrom']
For å lage et id til et tittelkart fra en rekke modeller, kan vi bruke en kombinasjon av array_combine ()
og array_column ()
:
$ models = [$ model1, $ model2, $ model3]; $ id_to_title = array_combine (array_column ($ models, 'id'), array_column ($ models, 'title'));
For å få de tre beste verdiene til en matrise, kan vi bruke array_count_values ()
, arsort ()
, og array_slice ()
:
$ bokstaver = ['a', 'a', 'a', 'a', 'b', 'b', 'c', 'd', 'd', 'd', 'd', 'd ']; $ values = array_count_values ($ bokstaver); // få nøkkel til å telle array arsort ($ verdier); // sortert nedadgående konserveringsnøkkel $ top = array_slice ($ verdier, 0, 3); // få topp 3 print_r ($ top); // Array // (// [d] => 5 // [a] => 4 // [b] => 2 //)
Det er enkelt å bruke array_sum ()
og array_map ()
å beregne summen av rekkefølgen i noen få rader:
$ 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 (funksjon ($ product_row) return $ product_row ['price'] * $ product_row ['count'];, $ rekkefølge)); print_r ($ sum); // 250
Som du kan se, kan kunnskap om de viktigste arrayfunksjonene gjøre koden mye kortere og mer lesbar. Selvfølgelig har PHP mange flere array-funksjoner, og selv de oppgitte funksjonene har mange variasjoner å bruke med ekstra parametere og flagg, men jeg tror at i denne opplæringen har vi dekket det grunnleggende at hver PHP-utvikler burde vite.
Vær oppmerksom på at jeg har laget en presentasjon med de givne eksemplene, så du kan laste den ned fra de relaterte koblingene og vise den til teamet ditt.
Hvis du har noen spørsmål, ikke nøl med å spørre dem i kommentarene til artikkelen.