Mit PHP-Arrays richtig arbeiten

In diesem Tutorial werde ich eine Liste der gängigen PHP-Array-Funktionen mit Anwendungsbeispielen und Best Practices erstellen. Jeder PHP-Entwickler muss wissen, wie er sie verwendet und wie Array-Funktionen kombiniert werden, um Code lesbar und kurz zu machen.

Außerdem gibt es eine Präsentation mit bestimmten Codebeispielen. Sie können sie von den entsprechenden Links herunterladen und Ihren Kollegen zeigen, um ein stärkeres Team aufzubauen.

Die Grundlagen

Beginnen wir mit den grundlegenden Funktionen, die mit Array-Schlüsseln und Werten arbeiten. Eines davon ist array_combine (), das ein Array mit einem Array für Schlüssel und einem anderen für seine Werte erstellt:

$ keys = ["Himmel", "Gras", "Orange"]; $ values ​​= ['blau', 'grün', 'orange']; $ array = array_combine ($ keys, $ values); print_r ($ array); // Array // (// [Himmel] => Blau // [Gras] => Grün // [Orange] => Orange //) 

Sie sollten wissen, dass die Funktion array_values ​​() ein indiziertes Array von Werten zurückgibt, array_keys () ein Array von Schlüsseln eines gegebenen Arrays zurückgibt und array_flip () Schlüssel mit Werten austauscht:

print_r (array_keys ($ array)); // ['sky', 'grass', 'orange'] print_r (array_values ​​($ array)); // ['blau', 'grün', 'orange'] print_r (array_flip ($ array)); // Array // (// [blau] => Himmel // [grün] => Gras // [orange] => orange //)

Machen Sie Ihren Code kürzer

Die Funktionsliste (), bei der es sich nicht wirklich um eine Funktion, sondern um eine Sprachkonstruktion handelt, dient zum schnellen Zuweisen von Variablen. Hier ist zum Beispiel ein einfaches Beispiel für die Verwendung von Liste() Funktion:

// Array definieren $ array = ['a', 'b', 'c']; // ohne Liste () $ a = $ array [0]; $ b = $ Array [1]; $ c = $ Array [2]; // mit liste () liste ($ a, $ b, $ c) = $ array;

Diese Konstruktion funktioniert perfekt mit Funktionen wie preg_slit () oder  explodieren() . Sie können auch einige Parameter überspringen, wenn Sie sie nicht definieren müssen:

$ string = 'hallo | wild | world'; list ($ hallo, $ world) = explodieren ('|', $ string); Echo ("$ hallo, $ world"); // Hallo Welt

Ebenfalls, Liste() kann mit verwendet werden für jeden, Das macht diese Konstruktion noch besser:

$ Arrays = [[1, 2], [3, 4], [5, 6]]; foreach ($ Arrays als Liste ($ a, $ b)) $ c = $ a + $ b; Echo ($ c. ','); // 3, 7, 11

Mit der Funktion extract () können Sie ein assoziatives Array in Variablen exportieren. Für jedes Element eines Arrays wird eine Variable mit dem Namen eines Schlüssels und einem Wert als Wert des Elements erstellt:

$ array = ["Kleidung" => "T-Shirt", "Größe" => "Mittel", "Farbe" => "Blau",]; extrahieren ($ array); echo ("$ clothes $ size $ color"); // T-Shirt mittelblau

Beachten Sie, dass Extrakt() ist nicht sicher, wenn Sie mit Benutzerdaten arbeiten (z. B. Ergebnisse von Anforderungen). Daher ist es besser, diese Funktion mit den Flags zu verwenden EXTR_IF_EXISTS und EXTR_PREFIX_ALL.

Das Gegenteil der vorherigen Funktion ist die compact () - Funktion, die aus Variablen ein assoziatives Array macht:

$ clothes = "T-Shirt"; $ size = 'medium'; $ color = 'blau'; $ array = compact ('Kleidung', 'Größe', 'Farbe'); print_r ($ array); // Array // (// [Kleidung] => T-Shirt // [Größe] => Mittel // [Farbe] => Blau //)

Filterfunktionen

Es gibt eine großartige Funktion für die Array-Filterung, die als array_filter () bezeichnet wird. Übergeben Sie das Array als ersten Parameter und eine anonyme Funktion als zweiten Parameter. Rückkehr wahr in einer Rückruffunktion, wenn Sie dieses Element im Array belassen möchten, und falsch wenn du es nicht tust:

$ zahlen = [20, -3, 50, -99, 55]; $ positive = array_filter ($ numbers, function ($ number) return $ number> 0;); print_r ($ positiv); // [0 => 20, 2 => 50, 4 => 55] 

Es gibt eine Möglichkeit, nicht nur nach den Werten zu filtern. Sie können verwenden ARRAY_FILTER_USE_KEY oder ARRAY_FILTER_USE_BOTH als dritter Parameter, um den Schlüssel oder den Wert und den Schlüssel an die Rückruffunktion zu übergeben.

Sie können auch anrufen array_filter () ohne Rückruf, um alle leeren Werte zu entfernen:

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

Sie können mit der Funktion array_unique () nur eindeutige Werte aus einem Array abrufen. Beachten Sie, dass die Funktion die Schlüssel der ersten eindeutigen Elemente beibehält:

$ 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 //) 

Mit array_column () können Sie eine Liste von Spaltenwerten aus einem mehrdimensionalen Array abrufen, z. B. eine Antwort aus einer SQL-Datenbank oder einen Import aus einer CSV-Datei. Übergeben Sie einfach ein Array und einen Spaltennamen:

$ array = [['id' => 1, 'title' => 'tree'], ['id' => 2, 'title' => 'sonne'], ['id' => 3, 'title '=>' Wolke '],]; $ ids = array_column ($ array, 'id'); print_r ($ ids); // [1, 2, 3] 

Ab PHP 7, array_column () wird noch leistungsfähiger, da es jetzt erlaubt ist, mit einem Array von Objekten zu arbeiten. So wurde es einfacher, mit einer Reihe von Modellen zu arbeiten:

$ cinemas = Cinema :: find () -> all (); $ cinema_ids = array_column ($ cinemas, 'id'); // php7 für immer!

Durch die Arrays gehen

Mit array_map () können Sie einen Rückruf auf jedes Element eines Arrays anwenden. Sie können einen Funktionsnamen oder eine anonyme Funktion übergeben, um ein neues Array basierend auf dem angegebenen Array zu erhalten:

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

Es gibt einen Mythos, dass es keine Möglichkeit gibt, Werte und Schlüssel eines Arrays an einen Rückruf zu übergeben, aber wir können es aufheben:

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

Aber das sieht schmutzig aus. Verwenden Sie stattdessen array_walk (). Diese Funktion sieht genauso aus wie array_map (), aber es funktioniert anders. Zunächst wird ein Array von einer Referenz übergeben, also array_walk () erstellt kein neues Array, sondern ändert ein gegebenes Array. Als Quellarray können Sie also den Arraywert durch eine Referenz in einem Rückruf übergeben. Array-Schlüssel können auch problemlos übergeben werden:

$ fruits = ['banana' => 'yellow', 'apple' => 'green', 'orange' => 'orange',]; array_walk ($ fruits, function (& $ value, $ key) $ value = "$ key ist $ value";); print_r ($ fruits); // Array // (// [Banane] => Banane ist gelb // [Apfel] => Apfel ist grün // [Orange] => Orange ist Orange //)

Die Arrays verbinden

Die beste Möglichkeit, zwei oder mehr Arrays in PHP zusammenzuführen, ist die Verwendung der Funktion array_merge (). Elemente von Arrays werden zusammengefügt, und Werte mit denselben Zeichenfolgeschlüsseln werden mit dem letzten Wert überschrieben:

$ 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 //) 

Verwenden Sie array_diff (), um Array-Werte aus einem anderen Array (oder Arrays) zu entfernen. Verwenden Sie array_intersect (), um Werte zu erhalten, die in bestimmten Arrays vorhanden sind. Die nächsten Beispiele zeigen, wie es funktioniert:

$ 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]

Rechnen Sie mit Array-Werten

Verwenden Sie array_sum (), um eine Summe der Array-Werte zu erhalten, array_product (), um sie zu multiplizieren, oder erstellen Sie Ihre eigene Formel mit array_reduce ():

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

Um alle Werte eines Arrays zu zählen, verwenden Sie array_count_values ​​(). Es werden alle eindeutigen Werte eines gegebenen Arrays als Schlüssel und eine Anzahl dieser Werte als Wert angegeben:

$ things = ["Apfel", "Apfel", "Banane", "Baum", "Baum", "Baum"]; $ values ​​= array_count_values ​​($ things); print_r ($ values); // Array // (// [Apfel] => 2 // [Banane] => 1 // [Baum] => 3 //)

Arrays generieren

Verwenden Sie array_fill (), um ein Array mit einer bestimmten Größe und demselben Wert zu generieren:

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

Verwenden Sie range (), um ein Array mit einem Bereich von Schlüsseln und Werten (z. B. Tagesstunden oder Buchstaben) zu generieren:

$ letters = Bereich ('a', 'z'); print_r ($ buchstaben); // ['a', 'b',…, 'z'] $ hours = range (0, 23); print_r ($ hours); // [0, 1, 2,…, 23]

Um einen Teil eines Arrays zu erhalten, verwenden Sie beispielsweise die ersten drei Elemente array_slice ():

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

Arrays sortieren

Es ist gut zu wissen, dass jede Sortierfunktion in PHP mit Arrays nach einer Referenz arbeitet und zurückgibt wahr auf erfolg oder falsch bei einem Ausfall. Es gibt eine grundlegende Sortierfunktion namens sort (), die Werte in aufsteigender Reihenfolge sortiert, ohne die Schlüssel zu erhalten. Der Sortierfunktion können folgende Buchstaben vorangestellt werden:

  • ein, sortenbewahrende Schlüssel
  • k, nach Schlüsseln sortieren
  • r, in umgekehrter / absteigender Reihenfolge sortieren
  • u, sortieren mit einer Benutzerfunktion

Sie können die Kombinationen dieser Buchstaben in der folgenden Tabelle sehen:

ein k r u
ein Asort
arsort Uasort
k ksort Krsort
r arsort Krsort rsort
u Uasort
usort

Array-Funktionen wie ein Boss kombinieren

Die wahre Magie beginnt, wenn Sie Array-Funktionen kombinieren. So können Sie leere Werte in nur einer Codezeile zuschneiden und entfernen array_filter () und array_map ():

$ values ​​= ["say", "bye", "," bis "," Leerzeichen ","]; $ words = array_filter (array_map ('trim', $ values)); print_r ($ words); // ['sagen', 'tschüss', 'bis', 'Leerzeichen']

Um aus einem Array von Modellen eine ID für eine Title Map zu erstellen, können wir eine Kombination aus verwenden array_combine () und array_column ():

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

Um die oberen drei Werte eines Arrays zu ermitteln, können wir verwenden array_count_values ​​(), arsort (), und array_slice ():

$ $ letters = ['a', 'a', 'a', 'a', 'b', 'b', 'c', 'd', 'd', 'd', 'd', 'd ']; $ values ​​= array_count_values ​​($ letters); // Schlüssel zum Zählen des Arrays erhalten arsort ($ values); // absteigend sortieren und den Schlüssel erhalten $ top = array_slice ($ values, 0, 3); // Top 3 bekommen print_r ($ top); // Array // (// [d] => 5 // [a] => 4 // [b] => 2 //)

Es ist einfach zu bedienen array_sum () und array_map () Um die Summe der Bestellung in wenigen Zeilen zu berechnen:

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

Fazit

Wie Sie sehen, kann das Wissen um die wichtigsten Array-Funktionen Ihren Code viel kürzer und lesbarer machen. Natürlich hat PHP viele weitere Array-Funktionen, und selbst die angegebenen Funktionen haben viele Variationen, die mit zusätzlichen Parametern und Flags verwendet werden können, aber ich denke, dass wir in diesem Tutorial die Grundlagen behandelt haben, die jeder PHP-Entwickler kennen sollte.

Bitte beachten Sie, dass ich eine Präsentation mit den angegebenen Beispielen erstellt habe, sodass Sie sie von den entsprechenden Links herunterladen und Ihrem Team zeigen können.

Wenn Sie Fragen haben, zögern Sie nicht, sie in den Kommentaren des Artikels zu fragen. 

Weiterführende Literatur und verwandte Links

  • Arrays Manual auf php.net
  • Anonyme Funktionen (Schließungen) auf php.net
  • Laden Sie eine Präsentation für Ihr Team herunter