Danish (Dansk) translation by Benjamin Høegh (you can also view the original English article)
I denne tutorial, har jeg tænkt mig at lave en liste over almindelige PHP array funktioner med eksempler på brugen og bedste i praksis. Alle PHP udviklere skal vide hvordan man bruger dem og hvordan man kan kombinere array funktioner for at gøre kode læseligt og kort.
Der er også en præsentation med givet kodeeksempler, så du kan downloade det fra de relaterede hyperlinks og så du kan vise det til dine kolleger og opbygge et stærkere hold.
Grundlæggende
Lad os starte med de grundlæggende funktioner, der arbejder med array nøgler og værdier. En af dem er array_combine(), hvilket skaber en array ved hjælp af en array til nøgler og en anden for sine værdier:
$keys = ['sky', 'grass', 'orange']; $values = ['blue', 'green', 'orange']; $array = array_combine($keys, $values); print_r($array); // Array // ( // [sky] => blue // [grass] => green // [orange] => orange // )
Du skal vide, at funktionen array_values() returnerer en indekseret array af værdier, array_keys() returnerer et array af nøglerne til en given array og array_flip() udvekslinger nøgler med værdier:
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 // )
Gøre din kode kortere
Funktionen list(), der ikke er rigtig en funktion, men en sprog konstruktion, er designet til at tildele variabler i en kort vej. For eksempel, er her en grundlæggende eksempel på brug af funktionen list()
:
// define array $array = ['a', 'b', 'c']; // without list() $a = $array[0]; $b = $array[1]; $c = $array[2]; // with list() list($a, $b, $c) = $array;
Denne konstruktion fungerer perfekt med funktioner som preg_slit()
eller explode()
. Også, kan du springe nogle parametre over, hvis du ikke behøver at definere dem:
$string = 'hello|wild|world'; list($hello, , $world) = explode('|', $string); echo("$hello, $world"); // hello, world
list()
kan også bruges med foreach
, hvilket gør denne konstruktion endnu bedre:
$arrays = [[1, 2], [3, 4], [5, 6]]; foreach ($arrays as list($a, $b)) { $c = $a + $b; echo($c . ', '); // 3, 7, 11, }
Med funktionen extract() kan du eksportere et associativt array til variabler. For hvert enkelt element i en matrix oprettes en variabel med navnet på en nøgle og værdi som en værdien for elementet:
$array = [ 'clothes' => 't-shirt', 'size' => 'medium', 'color' => 'blue', ]; extract($array); echo("$clothes $size $color"); // t-shirt medium blue
Vær opmærksom på at extract()
ikke er sikker, hvis du arbejder med brugerdata (som resultater af anmodninger), så det er bedre at bruge denne funktion med flagene EXTR_IF_EXISTS
og EXTR_PREFIX_ALL
.
Modsat af den forrige funktion er den compact() funktion, som gør et associativt array fra variabler:
$clothes = 't-shirt'; $size = 'medium'; $color = 'blue'; $array = compact('clothes', 'size', 'color'); print_r($array); // Array // ( // [clothes] => t-shirt // [size] => medium // [color] => blue // )
Filtrering funktioner
Der er en stor funktion til matrix filtrering, og det kaldes array_filter(). Passere matrixen som den første param og en anonym funktion som den anden param. Returnere true
i en callback funktion, hvis du ønsker at forlade dette element i arrayet, og false
, hvis du ikke gør:
$numbers = [20, -3, 50, -99, 55]; $positive = array_filter($numbers, function($number) { return $number > 0; }); print_r($positive); // [0 => 20, 2 => 50, 4 => 55]
Der er en måde at filtrere ikke kun af værdier. Du kan bruge ARRAY_FILTER_USE_KEY
eller ARRAY_FILTER_USE_BOTH
som en tredje parameter til at videregive den nøglen eller både værdi og nøglen til callback funktion.
Også, kan du ringe til array_filter()
uden et tilbagekald til at fjerne alle tomme værdier:
$numbers = [-1, 0, 1]; $not_empty = array_filter($numbers); print_r($not_empty); // [0 => -1, 2 => 1]
Du kan få kun entydige værdier fra en matrix ved hjælp af funktionen array_unique(). Bemærk, at funktionen vil bevare nøglerne til de første unikke elementer:
$array = [1, 1, 1, 1, 2, 2, 2, 3, 4, 5, 5]; $uniques = array_unique($array); print_r($uniques); // Array // ( // [0] => 1 // [4] => 2 // [7] => 3 // [8] => 4 // [9] => 5 // )
Med array_column(), kan du få en liste over kolonneværdier fra en multi-dimensionelle array, som et svar fra en SQL-database eller en import fra en CSV-fil. Blot passere en array og kolonne navn:
$array = [ ['id' => 1, 'title' => 'tree'], ['id' => 2, 'title' => 'sun'], ['id' => 3, 'title' => 'cloud'], ]; $ids = array_column($array, 'id'); print_r($ids); // [1, 2, 3]
Startende fra PHP 7, bliver array_column()
endnu mere kraftfulde, fordi det er nu tilladt at arbejde med en bred vifte af objekter. Så arbejder med en bred vifte af modeller bare blev lettere:
$cinemas = Cinema::find()->all(); $cinema_ids = array_column($cinemas, 'id'); // php7 forever!
Gå gennem arrays
Bruger array_map(), kan du anvende et tilbagekald til hvert enkelt element i en matrix. Du kan overføre et funktionsnavn eller anonym funktion til at få et nyt system baseret på den givne array:
$cities = ['Berlin', 'KYIV', 'Amsterdam', 'Riga']; $aliases = array_map('strtolower', $cities); print_r($aliases); // ['berlin', 'kyiv, 'warsaw', 'riga'] $numbers = [1, -2, 3, -4, 5]; $squares = array_map(function($number) { return $number ** 2; }, $numbers); print_r($squares); // [1, 4, 9, 16, 25]
Der er en myte, at der er ingen måde at pass værdier og nøgler i et array til et tilbagekald, men vi kan buste det:
$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 is 7 // [1] => name is James // )
Men det ser beskidt. Det er bedre at bruge array_walk() i stedet. Denne funktion ser det samme som array_map()
, men det virker forskelligt. Først og fremmest er et array vedtaget af en reference, så array_walk()
ikke oprette en ny array, men ændrer en given array. Så som en kilde array, kan du passerer array-værdi med en henvisning i et tilbagekald. Array-keys kan også overføres let:
$fruits = [ 'banana' => 'yellow', 'apple' => 'green', 'orange' => 'orange', ]; array_walk($fruits, function(&$value, $key) { $value = "$key is $value"; }); print_r($fruits); // Array // ( // [banana] => banana is yellow // [apple] => apple is green // [orange] => orange is orange // )
Sammenføjning Arrays
Den bedste måde at flette to eller flere arrays i PHP er at bruge funktionen array_merge(). Elementer af arrays bliver flettet sammen, og værdier med de samme streng nøgler vil blive overskrevet med den sidste værdi:
$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 // )
Brug array_diff() til at fjerne array værdier fra et andet array (eller arrays). For at få værdier, der er til stede i betragtning af arrays, skal du bruge array_intersect(). De næste eksempler vil vise, 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] $intersect = array_intersect($array1, $array2); print_r($intersect); // [2 => 3, 3 => 4]
Gør Matematikken Med Array Værdier
Brug array_sum() til at få en sum af array værdier, array_product() at multiplicere dem, eller oprette din egen formel med array_reduce():
$numbers = [1, 2, 3, 4, 5]; echo(array_sum($numbers)); // 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
Hvis du vil tælle alle værdier i et array, skal du bruge array_count_values(). Det vil give alle entydige værdier i en bestemt matrix som nøgler og en optælling af disse værdier som en værdi:
$things = ['apple', 'apple', 'banana', 'tree', 'tree', 'tree']; $values = array_count_values($things); print_r($values); // Array // ( // [apple] => 2 // [banana] => 1 // [tree] => 3 // )
Generering af Arrays
For at generere et array med en given størrelse og samme værdi, skal du bruge array_fill():
$bind = array_fill(0, 5, '?'); print_r($bind); // ['?', '?', '?', '?', '?']
For at generere et array med en række i nøgler og værdier, som dag timer eller bogstaver, skal du bruge range():
$letters = range('a', 'z'); print_r($letters); // ['a', 'b', ..., 'z'] $hours = range(0, 23); print_r($hours); // [0, 1, 2, ..., 23]
At få en del af et array—for eksempel, bare de første tre elementer — bruge array_slice():
$numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; $top = array_slice($numbers, 0, 3); print_r($top); // [1, 2, 3]
Sortering Arrays
Det er godt at huske, at hver sorteringsfunktionen i PHP fungerer med arrays af en reference og returnerer true på succes eller falsk på fiasko. Der er en grundlæggende sorteringsfunktionen kaldet sort(), og det mulige værdier i stigende rækkefølge uden at bevare nøgler. Sorteringsfunktionen kan være prepended af følgende bogstaver:
- a, sortere, bevare nøgler
- k, form af nøgler
- r, sortere i omvendt/faldende rækkefølge
- u, form med en bruger funktionen
Du kan se kombinationerne af disse breve i følgende tabel:
a | k | r | u | |
a | asort | arsort | uasort | |
k | ksort | krsort | ||
r | arsort | krsort | rsort | |
u | uasort | usort |
Kombinere Array Funktioner
Den virkelige magi begynder når du begynder at kombinere matrixfunktioner. Her er hvordan du kan beskære og fjerne tomme værdier i blot en enkelt linje kode med array_filter()
og array_map()
:
$values = ['say ', ' bye', ' ', ' to', ' spaces ', ' ']; $words = array_filter(array_map('trim', $values)); print_r($words); // ['say', 'bye', 'to', 'spaces']
For at oprette et id til en titel kort fra en bred vifte af modeller, kan vi bruge en kombination af array_combine()
og array_column()
:
$models = [$model1, $model2, $model3]; $id_to_title = array_combine( array_column($models, 'id'), array_column($models, 'title') );
For at få de øverste tre værdier i et array, kan vi bruge array_count_values()
, arsort()
og array_slice()
:
$letters = ['a', 'a', 'a', 'a', 'b', 'b', 'c', 'd', 'd', 'd', 'd', 'd']; $values = array_count_values($letters); // get key to count array arsort($values); // sort descending preserving key $top = array_slice($values, 0, 3); // get top 3 print_r($top); // Array // ( // [d] => 5 // [a] => 4 // [b] => 2 // )
Det er let at bruge array_sum()
og array_map()
til at beregne summen af orden i et par rækker:
$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
Konklusion
Som du kan se, kan viden om de vigtigste matrixfunktioner gøre din kode meget kortere og mere læservenlig. Selvfølgelig, PHP har mange flere matrixfunktioner,, og selv de givne funktioner har mange variationer til brug med ekstra parametre og flag, men jeg tror, at vi i denne tutorial har dækket det grundlæggende, som alle PHP udvikler bør vide.
Bemærk venligst, at jeg har oprettet en præsentation med de givne eksempler, så du kan downloade det fra de relaterede hyperlinks og vise det til dit hold.
Hvis du har spørgsmål, tøv ikke med at spørge dem i kommentarerne til artiklen.