|
|
|
PHP Array – Was ist ein Array?
Sie befinden sich:
Home >
Php >
PHP Array – Was ist ein Array?
Ein Array ist ein Datentyp, wo Sie beliebig viele Werte abspeichern können. Während
in einer Variable immer
ausschließlich ein einzelner Datentyp enthält, kann in einem Array variabel eine
große Anzahl verschiedene Werte enthalten. Das Verhältnis zwischen einer variabel
und ein Array können Sie vergleichen mit zum Beispiel: das Fahrrad und ein Auto oder
ein Flugzeug.
Die Variabel ist ähnlich wie ein Fahrrad, das Fahrrad kann eine einzelne Person befördern.
Natürlich kann das Fahrrad von unterschiedlichen Personen genutzen werden. So ist es bei
der Variabel, es kann bei einem Script mehrere unterschiedliche Werte im Ablauf des Skriptes
einen Wert der Variabel zugeordnet werden. Es besteht aber immer wieder die Möglichkeit,
dass ausschließlich ein Wert in der Variabel gespeichert werden kann.
Wenn Sie den Vergleich zu einem Array ziehen, müssten Sie das Array als Bus oder
Flugzeug ansehen. Ein Bus oder Flugzeug kann mehrere Personen transportieren. Ein Array kann
mehrere Werte über die Laufzeit eines Skriptes transportieren. Um ein Array zu
verwenden, müssen Sie einen Schlüssel definieren, der einen gewissen Wert in den
einzelnen Array speichert. Wenn kein Schlüssel definiert wurde in den Array, so wird
automatisch von Null, um eins hoch gezählt. Wenn sie einen einzelnen Wert ausgeben möchte,
ist es erforderlich, dass der Schlüssel, des Array angegeben wird. Es besteht zusätzlich
die Möglichkeit, ein Array in mehrere Ebenen zu verschachteln.
Die Indizierung der einzelnen Felder kann entweder fortlaufend von 0 - n geschehen, oder
assoziativ. Eine allgemeine Fehlerquelle, auf die auch erfahrene Programmierer immer wieder
hereinfallen, ist der Umstand, dass ein Array mit 10 Feldern mit dem Index 0 beginnt, und
mit 9 endet.
Genereller ausgedrückt, ein Array mit n Feldern hat als maximalen Feldindex n-1. Diese
Fehlerquelle können Sie umgehen, indem Sie ein assoziatives Indiz vergeben, das
bedeutet, dass der Index selbst ein Name oder ein Charakterstring sein kann.
Dabei ist zu beachten, dass selbst bei Verwendung dieser Zuordnung, intern mit Feldnummern
gearbeitet wird. Dies liegt im Speichermodell begründet. Um den Inhalt eines Feldes
bearbeiten oder abfragen zu können, wird ein Zeiger angelegt, der auf dem
entsprechenden Feld des Arrays zeigt.
Ein solcher Pointer kann als Hilfsmittel angesehen werden, um mit Arrays arbeiten zu können.
Da alle Elemente eines Arrays im Speicher hintereinanderliegen, muss der Zeiger immer einen
Speicherblock verschoben werden, um auf das nächste Element zugreifen zu können,
dabei wird immer vom ersten Element aus inkrementiert.
Außerdem lassen sich Arrays einfacher mit Schleifen verarbeiten.
Beispiel zeigt diese Vorteile:
<?php
$wert_eins = 1;
$wert_zwei = 2;
$wert_drei = 3;
$wert_vier = 4;
/*
* Um den Inhalt der vier Varibalen
* wiederzugeben muss nun jede erneut
* angespochen werden
*/
echo $wert_eins.'<br>';
echo $wert_zwei.'<br>';
echo $wert_drei.'<br>';
echo $wert_vier.'<br>';
?>
Ausgabe:
1 2 3 4
Beispiel mit ein array() und foreach-Schleife:
<?php
/*
* Ein Array vereinfacht das
* oben angeführte Beispiel erheblich
*/
$aArray =[0 , 1 , 2 , 3];
foreach( $aArray as $iAusgabe ){
echo $iAusgabe.'<br>';
}
?>
Ausgabe des Arrays:
0 1 2 3
Erklärung:
Der PHP-Code definiert ein Array, das aus vier Elementen besteht und lässt es dann in
einer Schleife durchlaufen. Der foreach-Befehl wird verwendet, um jedes Element des Arrays
aufzurufen und auszugeben. Jedes Element wird dann in einer neuen Zeile ausgegeben, was
durch das Zeichen „<br>" am Ende des echo-Befehls erreicht wird.
Was sind mehrdimensionale Arrays?
„Wenn die Rede von einem mehrfachen Array ist“ – wird von ein
multidimensional Array in PHP gesprochen, welches mehre Ebenen von Datenelemente enthält.
Jede Ebene kann wiederum ein Array sein, das mehrere Elemente enthält. Jede Ebene wird
von einem Schlüsselwort oder einer Nummer indexiert, das als „Schlüssel“
bezeichnet wird. Dadurch können mehrere Arrays in einem Array gespeichert
werden.
Diese Art von Array ist sehr flexibel und ermöglicht es, komplexe Datenstrukturen zu
erstellen und zu verwalten. Es können auch dynamische Arrays erzeugt werden, die sich
aufgrund der Anzahl der Elemente in einem bestimmten Array ändern.
Es ist möglich, einzelne Elemente eines Arrays mithilfe von Schlüsselwörtern
oder Indizes abzurufen. Die Syntax für das Abrufen von Elementen in einem
multidimensionalen Array ist jedoch etwas komplexer. Zuerst muss der Schlüssel für
jede Ebene identifiziert werden, bevor Sie auf die Elemente zugreifen können.
Beispiel mit ein mehrdimensionalen array() und einer for-Schleife
<?php
/*
* Initialisiere und weise Werte dem Array zu
*/
$aWertNeu =[];
$aWertNeu[] = 0;
$aWertNeu[] = 1;
$aWertNeu[] = 2;
$aWertNeu[] = 3;
for( $key = 0 ; $key < count($aWertNeu) ; $key++){
echo $aWertNeu[$key].'<br>';
}
?>
Ausgabe:
0 1 2 3
Erklärung:
In dem oben stehenden PHP-Code wird ein Array mit dem Namen $aWertNeu erstellt, das mehrere Werte des
Typs Integer speichert, nämlich 0, 1, 2 und 3. Diese Zahlen werden nacheinander dem
Array zugewiesen, wobei sie durch die Verwendung von eckigen Klammern ohne spezifischen
Index automatisch an die nächste verfügbare Position im Array angehängt
werden.
Anschließend wird eine Schleife verwendet, um die Werte des Arrays auszugeben. Die
Schleife benutzen einen Integer $key als Schleifenvariable, der von 0 startet
und bis zur Anzahl der Elemente im Array läuft, die mit der Funktion count($aWertNeu) ermittelt wird. Für jedes
Durchlaufen der Schleife wird der Wert von $aWertNeu[$key] ausgegeben. Dieser Zugriff
erfolgt wiederum durch die Verwendung eckiger Klammern, die den Index angeben, an dem der
jeweilige Integer-Wert im Array gespeichert ist.
Die Ausgabe jedes Werts (häufig „Value“ oder „Array Value“
genannt) erfolgt dann mit einem Zeilenumbruch <br>, was die Werte
vertikal untereinander darstellt. Dieses Beispiel demonstriert, wie mit einfachen
PHP-Strukturen ein Array initialisiert, mit Integer-Werten gefüllt und Sierch Iteration
ausgegeben werden kann.
Verwendung einen assoziativen Array in PHP: Optimierung von Values und deren
Manipulation
Hier ist ein Beispiel zur effektiven Verwendung von assoziativen Arrays in PHP, das die
Optimierung von Werten und deren Manipulation durch eine Funktion illustriert. Dieses
Beispiel zeigt, wie Sie ein zweidimensionales Array und eine Callbackfunktion nutzen können,
um spezifische Daten zu manipulieren:
<?php
/* Zweidimensionales assoziatives Array */
$aDaten = [
"Deutschland" => ["Hauptstadt" => "Berlin", "Einwohner" => 83000000],
"Frankreich" => ["Hauptstadt" => "Paris", "Einwohner" => 67000000]
];
/* Funktion zur Anpassung der Einwohnerzahlen */
function adjustPopulation(mixed &$aWert, string $sKey) {
/* Erhöhen der Einwohnerzahl um 10% für das Beispiel */
if ($sKey === "Einwohner") {
$aWert = round($aWert * 1.1);
}
}
/* Manipulieren der Values des assoziativen Arrays mittels einer Callbackfunktion */
array_walk_recursive($aDaten, 'adjustPopulation');
/* Ausgabe des angepassten Arrays */
echo "Nach der Anpassung:\n";
foreach ($aDaten as $sLand => $aInfos) {
echo $sLand . " - Hauptstadt: " . $aInfos['Hauptstadt'] . ", Einwohner: " . $aInfos['Einwohner'] . "\n";
}
?>
In der Erläuterung des obigen Beispiels wird ein zweidimensionales Array namens $aDaten
definiert, das Länder als Schlüssel benutzen. Jedes Land wird durch ein weiteres
Array repräsentiert, in dem spezifische Informationen wie Hauptstadt und Einwohnerzahl
gespeichert sind. Diese Informationen sind mittels eckigen Klammern zugänglich, die den
jeweiligen Schlüsselwert (Anm.: oft Array key genannt) umschließen, z.
B. $aInfos['Hauptstadt'] und $aInfos['Einwohner'].
Die adjustPopulation Funktion ist darauf ausgelegt, die Einwohnerzahl zu
modifizieren. Sie überprüft, ob der aktuelle Schlüssel 'Einwohner' lautet,
und erhöht in diesem Fall den Wert um 10%. Dies wird erreicht durch die Funktion array_walk_recursive,
die jedes Element des Arrays durchläuft und die angegebene Funktion anwendet.
Am Ende des Scripts wird das bearbeitete Array ausgegeben. Hierbei wird für jedes Land,
seine Hauptstadt und die aktualisierte Einwohnerzahl angezeigt, wobei die eckigen Klammern
erneut zum Einsatz kommen, um auf die Werte im assoziativen Array zuzugreifen. Dieses
Beispiel zeigt deutlich, wie mächtig PHP-Funktionen sein können, um dynamisch und
effizient mit Daten in assoziativen Arrays umzugehen.
Array Funktionen in PHP, um ein Array zu bearbeiten
Arrays sind ein wichtiger Teil der Programmierung in PHP. Sie ermöglichen es, mehrere
Werte in einer einzigen Variablen zu speichern. Um Arrays in PHP zu bearbeiten, gibt es eine
Reihe von Funktionen, die verwendet werden können. In diesem Artikel werden wir einige
dieser Funktionen aufzählen und erklären, wie sie funktionieren.
- Array
- in_array()
- in_array() überprüft, ob ein bestimmter Wert in einem Array
vorhanden ist und gibt einen booleschen Wert zurück.
- foreach()
- foreach() ist eine Funktion in PHP, die es ermöglicht, einen Array
Element für Element zu durchlaufen und dabei jedes Element einzeln
zu verarbeiten. Alternativ kann auch ein Array mit einer for() Schleife
ausgegeben werden.
- is_array()
- Die Funktion is_array() prüft, ob eine Variable ein Array ist oder
nicht und gibt dann einen booleschen Wert zurück. Sie kann also
verwendet werden, um zu überprüfen, ob eine Variable ein Array
ist oder nicht.
- list()
- list() ist eine PHP-Funktion, die es ermöglicht, ein Array in einer
Variablen zu speichern und gleichzeitig die Werte anhand einer Liste von
Variablen zu extrahieren.
- array_map()
- array_map() ist eine Funktion, die es ermöglicht, eine
Callback-Funktion auf jedes Element eines Arrays anzuwenden und ein
neues Array zurückzugeben, das die Ergebnisse des Callback-Aufrufs
enthält.
- array_merge()
- Die array_merge() Funktion fügt zwei oder mehr Arrays zu einem
einzigen Array zusammen. Numerische Schlüssel werden dabei neu
indiziert, String-Schlüssel bleiben erhalten.
- array_merge_recursive()
- array_merge_recursive() kombiniert ein oder mehrere Arrays, wobei Schlüssel
mit gleichen Namen in einem neuen Array zu einem Unterarray
zusammengefasst werden.
- array_chunk()
- Die array_chunk() Funktion teilt ein Array in kleinere Arrays auf, die
jeweils eine bestimmte Anzahl an Elementen enthalten. Sie kann verwendet
werden, um ein Array in mehrere Abschnitte zu unterteilen.
- array_splice()
- PHP array_splice() ist eine Funktion, die ein bestehendes Array verändert,
indem sie Elemente hinzufügt, ersetzen oder entfernt. Es kann auch
verwendet werden, um Teile des Arrays in einem neuen Array zu speichern.
Diese Funktion kann sehr nützlich sein, um dynamisch Arrays zu
bearbeiten.
- array_slice()
- array_slice() extrahiert einen Teilbereich aus einem Array und gibt ihn
als neues Array zurück. Das Original-Array bleibt dabei unverändert.
- array_filter()
- array_filter() filtert die Elemente eines Arrays anhand einer Callback-Funktion
und gibt ein neues Array mit den Elementen zurück, für die der
Callback true liefert.
- array_find()
- array_find() durchsucht ein Array mit einer Callback-Funktion und gibt
das erste Element zurück, für das der Callback true ergibt.
Verfügbar ab PHP 8.4.
- array_key_exists()
- Die PHP-Funktion array_key_exists() prüft, ob ein bestimmter Schlüssel
oder Index in einem Array vorhanden ist. Wenn der angegebene Schlüssel
im Array gefunden wird, gibt die Funktion true zurück, andernfalls
false.
- array_unique()
- Die PHP Funktion array_unique() entfernt alle doppelten Elemente aus
einem Array und gibt ein Array mit einmaligen Elementen zurück.
- array_search()
- array_search durchsucht ein Array nach einem bestimmten Wert und gibt
den dazugehörigen Schlüssel zurück.
- array_count_values()
- Die PHP Funktion array_count_values() zählt die Anzahl der Werte in
einem Array und gibt ein assoziatives Array zurück, dessen Schlüssel
die einzelnen Werte des Arrays sind und deren Werte die Anzahl der
Vorkommen des jeweiligen Schlüssels sind.
- array_rand()
- Die PHP-Funktion array_rand() wählt zufällig einen oder
mehrere Schlüssel aus einem Array und gibt diese zurück.
- array_keys()
- Die PHP-Funktion array_keys() gibt ein Array mit allen Schlüsseln
(Keys) des übergebenen Arrays zurück.
- array_values()
- Die PHP Funktion array_values() gibt ein neues Array zurück, das
die Werte des ursprünglichen Arrays enthält, wobei die Schlüssel
(Keys) neu indiziert werden.
- Array Basic Funktionen
- count()
- Die count() Funktion zählt die Anzahl der Elemente eines Arrays
oder Objektes und gibt diese als Ganzzahl zurück.
- array_pop()
- array_pop() entfernt das letzte Element eines Arrays und gibt es zurück.
Es verkürzt auch die Länge des Arrays um einen Eintrag.
- array_shift()
- array_shift() entfernt das erste Element eines Arrays und gibt es zurück.
Alle numerischen Schlüssel werden danach neu indiziert.
- max()
- max() gibt den größten Wert aus einer Liste von Werten zurück.
Es kann mit numerischen, String-basierten und Array-basierten Werten
verwendet werden.
- current()
- current() gibt das aktuelle Element eines Arrays zurück, auf das
der interne Zeiger des Arrays zeigt. Der Zeiger wird dabei nicht
verändert. Verwenden Sie next() oder prev(), um den Zeiger zu bewegen.
- next()
- next() wird verwendet, um den Cursor eines Arrays auf das nächste
Element zu bewegen und dann dessen Wert zurückzugeben. Es gibt auch
eine Funktion namens prev(), die das Gegenteil bewirkt.
- each() (entfernt seit PHP 8.0)
- each() lieferte ein Array-Element mit seinem Schlüssel und Wert als
ein Array zurück. Diese Funktion wurde in PHP 8.0 entfernt.
Verwenden Sie stattdessen eine
foreach-Schleife.
- array_push()
- array_push() ist eine Funktion in PHP, die einem bestehenden Array
Elemente hinzufügt. Es akzeptiert mehrere Argumente, die als neue
Elemente am Ende des Arrays hinzugefügt werden. array_push() gibt
die neue Anzahl der Elemente im Array zurück.
- Array konvertieren
- split() (entfernt seit PHP 7.0)
- split() teilte einen String anhand eines Trennzeichens in ein Array auf.
Diese Funktion wurde in PHP 7.0 entfernt. Verwenden Sie stattdessen
explode()
oder preg_split().
- explode()
- Explode() ist eine Funktion in PHP, die es ermöglicht, eine
Zeichenkette anhand eines Trennzeichens in ein Array zu zerlegen.
- implode()
- implode() nimmt ein Array an Strings und kombiniert sie zu einem
einzigen String, getrennt durch ein angegebenes Trennzeichen.
- join()
- Die join()-Funktion verbindet alle Elemente eines Arrays in einen
String, wobei ein angegebenes Trennzeichen zwischen jeden Wert eingefügt
wird.
- Array-Sortiermethoden
-
- array_multisort()
- Die array_multisort() Funktion ermöglicht es, mehrere Arrays oder
Arrays von Objekten nach einem oder mehreren Schlüsseln zu
sortieren und kombiniert die Ergebnisse.
- Array als Set
- array_diff()
- array_diff() erlaubt es, zwei oder mehrere Arrays zu
vergleichen und den Unterschied zwischen Arrays mittels var_dump() oder
print_r() auszugeben.
- array_diff_key()
- array_diff_key() vergleicht zwei oder mehr Arrays anhand ihrer Schlüssel
und gibt die Einträge des ersten Arrays zurück, deren Keys in den
anderen Arrays nicht vorkommen.
- array_unshift()
- array_unshift ist eine PHP-Funktion, die ein oder mehrere Elemente am
Anfang eines Arrays hinzufügt. Der erste Parameter ist das Array,
an das die Elemente hinzugefügt werden sollen, und die folgenden
Parameter sind die Elemente, die hinzugefügt werden sollen. Die
Funktion gibt die neue Länge des Arrays zurück.
Numerische und assoziative Arrays im Vergleich
PHP unterscheidet bei Arrays nicht so streng wie viele andere Sprachen. Intern ist jedes Array eine geordnete Map, also eine Sammlung aus Schlüssel-Wert-Paaren. Trotzdem hat sich die Trennung in zwei Denkmodelle bewährt: numerische Arrays mit fortlaufendem Integer-Index ab Null und assoziative Arrays mit sprechenden String-Schluesseln. Beides liegt im selben Datentyp, aber Sie behandeln sie im Code unterschiedlich.
<?php
declare(strict_types=1);
/* Numerisch: Reihenfolge und Position zaehlen */
$farben = ['rot', 'gruen', 'blau'];
echo $farben[1]; /* gruen */
/* Assoziativ: Bedeutung statt Position */
$user = [
'name' => 'Anna',
'mail' => 'anna@example.com',
'admin' => true,
];
echo $user['mail']; /* anna@example.com */
Numerische Arrays nutzen Sie für Listen gleichartiger Werte, deren Reihenfolge wichtig ist. Beispiele sind Tags eines Artikels, Treffer einer Datenbankabfrage oder Zeilen einer Datei. Assoziative Arrays sind die richtige Wahl, wenn jedes Feld eine Bedeutung hat, etwa ein Datensatz mit Name, Mail und Rolle. Mit array_keys() und array_values() können Sie jederzeit zwischen den beiden Sichten wechseln und nur die Schlüssel oder nur die Werte herausziehen.
List-Helfer für numerische Arrays
Eine kleine Falle: Wenn Sie array_shift() oder unset() auf ein numerisches Array anwendest, bleiben die alten Indizes erhalten. Aus [0, 1, 2] wird so schnell [1 => 1, 2 => 2] mit Luecke an Position null. Wenn sich das stört, fuehrst Sie das Ergebnis kurz durch array_values() und bekommen saubere, fortlaufende Indizes zurueck.
Mehrdimensionale Arrays in der Praxis
Echte Daten sind selten flach. Sobald Sie Listen von Datensaetzen verwaltest, haben Sie ein mehrdimensionales Array, also ein Array, dessen Werte selbst wieder Arrays sind. Das ist die typische Struktur, die Sie aus einer Datenbankabfrage mit fetchAll() oder aus einem JSON-Stream zurueckbekommen.
<?php
declare(strict_types=1);
$buecher = [
['titel' => 'PHP fuer Einsteiger', 'autor' => 'Schubert', 'preis' => 24.90],
['titel' => 'Modernes PHP', 'autor' => 'Mueller', 'preis' => 32.00],
['titel' => 'Clean Code in PHP', 'autor' => 'Becker', 'preis' => 29.50],
];
foreach ($buecher as $buch) {
echo $buch['titel'] . ' von ' . $buch['autor'] . "
";
}
Sie können beliebig tief verschachteln, solltest aber Mass halten. Mehr als drei Ebenen werden im Kopf schnell unuebersichtlich. Wenn Sie sich dabei ertappst, vier oder fünf eckige Klammern hintereinander zu schreiben, ist das ein gutes Zeichen, die Struktur in eine eigene Klasse mit typisierten Properties zu giessen. Wer trotzdem mit verschachtelten Arrays arbeitet, findet in array_merge_recursive() einen passenden Helfer und mit array_multisort() eine Möglichkeit, mehrere Spalten gleichzeitig zu sortieren.
Array-Destrukturierung mit list und Kurzform
Statt einzelne Indizes per Hand auszulesen, können Sie ein Array in einem Rutsch in mehrere Variablen entpacken. Die alte Form heißt list(), seit PHP 7.1 gibt es die Kurzschreibweise mit eckigen Klammern. Beide funktionieren auch für assoziative Arrays, wenn Sie explizit Schlüssel angeben.
<?php
declare(strict_types=1);
/* Numerische Destrukturierung */
$rgb = [200, 120, 50];
[$rot, $gruen, $blau] = $rgb;
/* Assoziative Destrukturierung */
$user = ['name' => 'Lena', 'age' => 32, 'city' => 'Hamburg'];
['name' => $name, 'city' => $stadt] = $user;
echo "$name aus $stadt"; /* Lena aus Hamburg */
Besonders elegant wird das in einer foreach-Schleife, weil Sie im Kopf der Schleife schon nur die Felder herausziehen, die Sie im Body brauchen. Das macht den Schleifenkoerper deutlich kürzer und bessert die Lesbarkeit. Genauso können Sie Funktionen mehrere Werte zurueckgeben lassen, indem Sie sie als Array packst und beim Aufruf sichekt entpackst.
Wichtige Array-Funktionen, die Sie kennen müssen
PHP liefert über 80 Funktionen rund um Arrays mit. Sie brauchen nicht alle, aber eine kleine Stammtruppe solltest Sie fluessig im Kopf haben. Sie deckt 80 Prozent aller Alltagsaufgaben ab.
array_map() wendet eine Callback auf jedes Element an und liefert ein neues Array zurueck.
array_filter() behaelt nur die Elemente, für die der Callback wahr liefert.
array_reduce() faltet ein Array zu einem einzelnen Wert zusammen, etwa eine Summe oder einen kombinierten String.
array_merge() hängt mehrere Arrays aneinander.
array_keys() und array_values() liefern jeweils nur eine der beiden Achsen.
<?php
declare(strict_types=1);
$zahlen = [1, 2, 3, 4, 5];
$quadrate = array_map(fn(int $n): int => $n * $n, $zahlen);
$gerade = array_filter($zahlen, fn(int $n): bool => $n % 2 === 0);
$summe = array_reduce($zahlen, fn(int $carry, int $n): int => $carry + $n, 0);
print_r($quadrate); /* [1, 4, 9, 16, 25] */
print_r($gerade); /* [1 => 2, 3 => 4] */
echo $summe; /* 15 */
Die drei Methoden map, filter und reduce bilden zusammen das Herzstueck der funktionalen Listenverarbeitung. Wer aus JavaScript oder Python kommt, fühlt sich hier sofort zuhause. Mit Arrow Functions bleiben die Aufrufe kompakt und gut lesbar.
Spread-Operator: Arrays entpacken seit PHP 7.4
Vor PHP 7.4 müssenest Sie Arrays mit array_merge() zusammensetzen. Seit Version 7.4 gibt es den Spread-Operator auch für Array-Literale. Die drei Punkte vor einem Array entpacken seine Elemente an dieser Stelle.
<?php
declare(strict_types=1);
$basis = ['php', 'mysql'];
$ergaenzt = ['html', 'css', ...$basis, 'javascript'];
print_r($ergaenzt);
/* ['html', 'css', 'php', 'mysql', 'javascript'] */
Seit PHP 8.1 funktioniert der Spread-Operator auch mit String-Schluesseln. Damit können Sie assoziative Arrays elegant zusammenfuehren, ohne array_merge() aufzurufen. Spaetere Eintraege gewinnen, wenn ein Schlüssel doppelt vorkommt. Genauso können Sie den Operator in der Parameterliste einer Funktion einsetzen, um eine variable Anzahl an Argumenten anzunehmen.
Array gegen SplFixedArray: wann lohnt der Wechsel?
PHP-Arrays sind extrem flexibel, aber diese Flexibilitaet kostet Speicher. Intern verwaltet jedes Array eine Hashmap, auch wenn Sie es nur als simple Liste benutzen. Für rein numerisch indizierte Listen mit fester Groesse gibt es eine speicherfreundlichere Alternative: SplFixedArray. Sie reserviert genau so viele Slots, wie Sie angeben, und akzeptiert nur Integer-Schlüssel von Null bis zur Maximalgroesse.
<?php
declare(strict_types=1);
$fix = new SplFixedArray(3);
$fix[0] = 'eins';
$fix[1] = 'zwei';
$fix[2] = 'drei';
foreach ($fix as $i => $wert) {
echo "$i: $wert
";
}
In Mikro-Benchmarks bei sehr großen Datenmengen kann SplFixedArray rund ein Drittel Speicher sparen. Im Alltag merken Sie das selten, weil PHP-Arrays auch unter Last erstaunlich schnell sind. Greifen Sie nur dann zu SplFixedArray, wenn Sie nachweislich an einem Speicher-Limit arbeiten, etwa bei Bildverarbeitung oder beim Aufbau großer Lookup-Tabellen.
Sortieren: sort, asort, ksort und usort im Ueberblick
Sortieren ist die haeufigste Folgeoperation auf Arrays. PHP bietet ein knappes Dutzend Funktionen, die sich in zwei Achsen unterscheiden: nach was wird sortiert (Werte oder Schlüssel) und werden die Schlüssel-Wert-Paare beibehalten. Das führt zu vier wichtigen Vertretern.
sort() sortiert die Werte aufsteigend und vergisst dabei die alten Schlüssel. Die Eintraege werden mit Null beginnend neu durchnummeriert.
asort() sortiert die Werte aufsteigend, behaelt aber die Zuordnung Schlüssel zu Wert. Ideal für assoziative Arrays.
ksort() sortiert nach Schluesseln aufsteigend. Praktisch, wenn Sie Konfigurationen oder Lookup-Tabellen alphabetisch ausgeben wollen.
usort() sortiert nach einer eigenen Vergleichsfunktion. Damit sortieren Sie auch komplexe Datensaetze nach beliebigen Kriterien.
<?php
declare(strict_types=1);
$produkte = [
['name' => 'Tasse', 'preis' => 9.90],
['name' => 'Buch', 'preis' => 24.00],
['name' => 'Stift', 'preis' => 1.50],
];
/* nach Preis aufsteigend */
usort($produkte, fn(array $a, array $b): int => $a['preis'] <=> $b['preis']);
foreach ($produkte as $p) {
echo $p['name'] . ': ' . $p['preis'] . " €
";
}
Beachte, dass alle Sortierfunktionen das Original-Array per Referenz verändern und keinen neuen Wert zurueckgeben. Sie liefern nur einen Boolean. Wer sortiert, ohne das Original zu berühren, klont das Array vorher mit dem Spread-Operator oder kopiert es über eine Zuweisung. Für absteigende Reihenfolge gibt es zu jeder Funktion das Pendant mit r am Anfang, also rsort(), arsort() oder krsort().
Diagramm: Operationen entlang einer Pipeline
Wenn Sie filter, map und sort kombinierst, bauen Sie sich eine kleine Datenpipeline. Das folgende Schaubild zeigt die typische Reihenfolge.
flowchart TD
A[Roh-Array] --> B[array_filter]
B --> C[array_map]
C --> D[usort]
D --> E[implode oder Ausgabe]
Die Reihenfolge ist meistens: zuerst filtern, damit die folgenden Schritte mit weniger Daten arbeiten, dann transformieren, dann sortieren und am Ende ausgeben oder mit implode() zu einem String verbinden. Wer zuerst sortiert und danach filtert, verschwendet Rechenzeit, weil die Sortierung Eintraege berührt, die später ohnehin verworfen werden.
Praxisbeispiel: Liste filtern, sortieren und ausgeben
Zum Abschluss ein vollstaendiges Beispiel, das alle wichtigen Bausteine aus diesem Artikel kombiniert. Sie bekommen eine Liste von Bestellungen, wollen nur die offenen sehen, sie nach Faelligkeit sortieren und am Ende als HTML-Liste ausgeben.
<?php
declare(strict_types=1);
$bestellungen = [
['nr' => 1001, 'kunde' => 'Anna', 'betrag' => 49.90, 'offen' => true, 'faellig' => '2026-05-15'],
['nr' => 1002, 'kunde' => 'Bjoern', 'betrag' => 199.00, 'offen' => false, 'faellig' => '2026-04-20'],
['nr' => 1003, 'kunde' => 'Carla', 'betrag' => 12.50, 'offen' => true, 'faellig' => '2026-05-02'],
['nr' => 1004, 'kunde' => 'Dorian', 'betrag' => 80.00, 'offen' => true, 'faellig' => '2026-05-09'],
];
/* 1) nur offene Bestellungen */
$offen = array_filter($bestellungen, fn(array $b): bool => $b['offen'] === true);
/* 2) nach Faelligkeit aufsteigend sortieren */
usort($offen, fn(array $a, array $b): int => strcmp($a['faellig'], $b['faellig']));
/* 3) auf das Wesentliche reduzieren */
$zeilen = array_map(
fn(array $b): string => '#' . $b['nr'] . ' ' . $b['kunde'] . ' (' . $b['faellig'] . ')',
$offen
);
/* 4) als HTML-Liste ausgeben */
echo "<ul>
";
foreach ($zeilen as $zeile) {
echo ' <li>' . htmlspecialchars($zeile) . "</li>
";
}
echo "</ul>
";
Das Schoene an dieser Pipeline ist, dass jeder Schritt für sich klein und testbar bleibt. Sie können $offen, $zeilen oder das Endergebnis in einem Test einzeln prüfen. Wer noch einen Schritt weiter geht, kapselt jede Stufe in eine kleine Funktion und nutzen PHPUnit, um die einzelnen Bausteine abzusichern. So entstehen aus Array-Operationen wartbare und gut dokumentierte Module, die Sie in vielen Projekten wiederverwenden können.
weiter zum nächsten Kapitel:
Arrays mit von PHP zur verfügung gestellten Funktionen sortieren
|