Arrays
Arrays sind ein wichtiges Konzept in PHP. Ein Array ist eine geordnete Liste. Beispielsweise eine Liste von Zahlen oder eine Liste von Texten (Strings). Wir können mittels einem Array beispielsweise die Wochentage in einer Liste zusammenfassen, oder alle Benutzer unsere Seite. Im folgenden lernt ihr, wie ihr Arrays definiert, wie ihr mit diesen arbeiten und welche wichtigen und nützlichen Funktionen existieren.
Siehe ebenfalls die drei nachfolgenden Artikel zu Über die Elemente eines Arrays iterieren, foreach-Schleife und Arrays sortieren.
Inhaltsverzeichnis
Arrays definieren
Bisher konnte jede Variable nur einen Wert speichern. In einem Array können nun aber beliebig viele Werte gespeichert werden, auch von unterschiedlichen Typen. So kann ein PHP Array z.B. eine Zeichenkette (String/Text), eine Ganzzahl und eine Zahl mit Kommastellen enthalten und auf jeden dieser Werte kann man separat zugreifen.
Das hört sich jetzt alles recht kompliziert an, ist aber ganz einfach, darum hier ein Beispiel:
<?php $wochentage = array("Sonntag","Montag","Dienstag", "Mittwoch","Donnerstag","Freitag","Samstag"); echo $wochentage[1]; ?>
Einem PHP Array wird ganz normal ein Variablennamen zugeordnet, hier wochentage, allerdings erfolgt die Zuweisung der Daten nicht einfach durch das Gleichheitszeichen, sondern danach kommt noch der Befehl: array();.
In diesem Befehl sind jetzt die verschiedenen Werte gespeichert, bei uns die ausgeschriebenen Wochentage.
Das Zugreifen auf solch einen Wert ist auch relativ simpel:
1 2 3 |
<?php echo $wochentage[1]; ?> |
Ausgabe: Montag
Wir geben wir zuerst wieder den Variable-Namen (wochentage) an und danach das Element bzw. den Wert, auf das wir zugreifen möchten.
Ein Array hat dabei die enthaltenen Werte durchnummeriert, und fängt bei 0 an zu zählen.
Also mit $wochentage[0]; würden wir den Wert Sonntag erhalten, Montag hat die Nummer (bzw. den Index) 1 und so weiter.
Assoziative Arrays definieren
Bei großen Arrays wird es irgendwann umständlich zu wissen, welche Nummer/Index zu welchem Wert gehört, darum gibt es assoziative Arrays. Das heißt, man kann für einen Wert einen Schlüssel (auch Key genannt) zuweisen, dies kann z.B. eine andere Zeichenkette sein. Die Zuweisung erfolgt per =>
<?php $wochentage = array( "so" => "Sonntag", "mo" => "Montag", "di" => "Dienstag", "mi" => "Mittwoch", "do" => "Donnerstag", "fr" => "Freitag", "sa" => "Samstag"); echo $wochentage["mo"]; ?>
Dies ist wieder ein Array mit unseren Namen der Wochentage. Dabei wurde dem Schlüssel so der Wert Sonntag zugewiesen, dem Schlüssel mo dem Wert Montag und so weiter.
Der Vorteil ist, dass man jetzt bequemer auf das Array zugreifen kann:
1 |
echo $wochentage["mo"]; |
Ausgabe: Montag
Anstatt jetzt die Nummer/Index des Elementes anzugeben, gibt man hier den Schlüssel für das Element an, also so für Sonntag, mo für Montag und sa für Samstag.
Selbstverständlich kann man nachträglich auch Werte in einem Array verändern:
<?php $wochentage = array( "so" => "Sonntag", "mo" => "Montag", "di" => "Dienstag", "mi" => "Mittwoch", "do" => "Donnerstag", "fr" => "Freitag", "sa" => "Samstag"); $wochentage["mo"] = "Monday"; echo $wochentage["mo"]; ?>
Ausgabe: Monday
Weitere Werte einem Array hinzufügen
Ihr könnt einem Array bequem weitere Werte hinzufügen. Dies geht mittels [] hinter dem Array-Namen:
<?php $mitarbeiter = array("Bob","Peter"); $mitarbeiter[] = "Lisa"; echo $mitarbeiter[2]; ?>
Ausgabe: Lisa
Mit $mitarbeiter[] wird automatisch ein neues Element in unserem Array erstellt, und diesem wird der Wert Lisa zugewiesen.
Dies lässt sich ebenfalls auch auf leere Arrays anwenden:
<?php $mitarbeiter = array(); $mitarbeiter[] = "Bob"; $mitarbeiter[] = "Peter"; $mitarbeiter[] = "Lisa"; echo $mitarbeiter[0]; ?>
Hier wird zuerst ein leeres Array erstellt und danach werden die Mitarbeiter hinzugefügt. Wie viele Elemente ihr einem Array hinzufügen möchtet, ist euch überlassen.
Mit assoziativen PHP Arrays funktioniert dies ähnlich, aber wir müssen den neuen Schlüssel mit angeben:
<?php $mitarbeiter = array( "Bob" => "Bob Meier", "Peter" => "Peter Schröder"); $mitarbeiter["Lisa"] = "Lisa Müller"; echo $mitarbeiter["Lisa"]; ?>
Ausgabe: Lisa Müller
Sollte der Schlüssel Lisa bereits vergeben sein, dann wird kein neuer Eintrag erstellt, sondern der vorhandene Eintrag wird überschrieben.
Arrays in Strings konvertieren
Eine sehr nützliche Funktion ist implode($trennzeichen, $array) . Hiermit könnt ihr die Elemente eines Arrays zu einem String verbinden. Mittels der Variable $trennzeichen könnt ihr spezifizieren, welches Verbindungselement zwischen den Elementen erscheinen soll. Diese Funktion ist sehr nützlich, um so z.B. formatierte Listen auszugeben. Gerade mit anderen Array-Funktionen, z.B. zum Sortieren des Arrays, ist dies sehr nützlich.
<?php $namen = array("Paul", "Max", "Hans"); echo "Namen per Komma trennen: <br>"; $namenStr = implode(", ", $namen); echo $namenStr; echo "<br><br>"; echo "Ein Name pro Zeile: <br>"; echo implode("<br>", $namen);
Strings in Arrays konvertieren
Im Gegensatz zu implode() lässt sich mittels explode($trennzeichen, $text) ein Text (String) in ein Array konvertieren. Hierbei wird der Text an allen Vorkommen von $trennzeichen getrennt.
<?php $text = "Paul,Max,Hannes"; $namen = explode(",", $text ); //Konvertierung des Strings in ein Array echo "<pre>"; var_dump($namen); echo "</pre>"; //Formartierte Ausgabe des Arrays //Ersetze die 1. Person durch neuen Namen $namen[1] = "Lisa"; //Verwandel das Array zurück in einen String $text = implode(", ", $namen); echo $text;
Mehrdimensionale Arrays definieren
In einem Array kann man ein weiteres Array speichern. Und in diesem Array ein weiteres Arrray usw. Solche Arrays nennt man dann mehrdimensionale Arrays. Die Dimension gibt dabei an, wie Tief diese Verschachtelung geht. Ein normales Array wäre ein 1-dimensionales Array, wenn jetzt in dem Array ein weiteres Array gespeichert ist, ist dies ein 2-dimensionales Array.
Dafür hier ein Beispiel:
<?php $mitarbeiter = array( array("Klaus", "Zabel"), array("Arnie", "Meier"), array("Willi", "Brand") ); //Daten ausgeben echo "Vorname: ".$mitarbeiter[0][0]; echo " Nachname: ".$mitarbeiter[0][1]; ?>
Ausgabe: Vorname: Klaus Nachname: Zabel
Wie wir sehen, gibt man jetzt nicht nur einen Index an, sondern zwei. Der erste Index gibt an, welchen Mitarbeiter wir aus der Liste haben möchte, und der zweite Index ob wir den Vornamen oder den Nachnamen ausgeben möchten.
Normale Arrays und assoziativen Arrays lassen sich gut miteinander kombinieren:
<?php $mitarbeiter = array(); $mitarbeiter[] = array("Vorname"=>"Klaus", "Nachname"=>"Zabel"); $mitarbeiter[] = array("Vorname"=>"Arnie", "Nachname"=>"Meier"); $mitarbeiter[] = array("Vorname"=>"Willi", "Nachname"=>"Brand"); //Daten ausgeben echo "Vorname: ".$mitarbeiter[0]["Vorname"]; echo " Nachname: ".$mitarbeiter[0]["Nachname"]; ?>
Da wir jetzt in einem normalem Array ein assoziatives Array (also eins mit Schlüssel) speichern, müssen wir als zweiten Wert auch den Schlüssel für Vor/Nachname angeben.
Dies geht natürlich auch mit noch mehr Dimensionen, z.B. so:
<?php $mitarbeiter = array(); $mitarbeiter["Klaus"]["Vorname"] = "Klaus"; $mitarbeiter["Klaus"]["Nachname"] = "Zabel"; $mitarbeiter["Klaus"]["Kinder"][] = "Klaus-Junior"; $mitarbeiter["Klaus"]["Kinder"][] = "Kind2"; //Daten ausgeben echo "Vorname: ".$mitarbeiter["Klaus"]["Vorname"]; echo " Nachname: ".$mitarbeiter["Klaus"]["Nachname"]; echo "<br> Er hat "; echo count($mitarbeiter["Klaus"]["Kinder"])." Kinder"; //Ausgabe von Kind1: //$mitarbeiter["Klaus"]["Kinder"][0]; echo "<br> Kinder: <br>"; foreach($mitarbeiter["Klaus"]["Kinder"] AS $name) { echo $name."<br>"; } ?>
Dies ist schon etwas schwerer zu verstehen, aber wenn man es verstanden hat, sollte es eigentlich keine weiteren Fragen zu Arrays geben.
Also zuerst haben wir wieder unser Array mit dem Mitarbeiter Klaus. Dabei benutzen wir diesmal gleich ein assoziatives Array.
Für Klaus wurde jetzt der Vorname und der Nachname gespeichert. Unter dem Schlüssel Kinder fügen wir jetzt ein weiteres Array hinzu, wobei jedes Element dieses Arrays den Namen eines Kindes von ihm enthält. Dieses Array mit den Kindernamen können wir ganz normal per foreach ausgeben.
Arrays durchsuchen
Mittels der Funktion in_array($suche,$array) lässt sich überprüfen ob ein Wert in einem Array vorhanden ist.:
<?php $mitarbeiter = array("Bob","Peter","Lisa"); $name = "Bob"; if(in_array($name,$mitarbeiter)) { echo "Der Name $name ist in dem Array enthalten"; } ?>
Im obigen Beispiel wird überprüft, ob Bob in dem Mitarbeiter-Array vorhanden ist, wenn ja, gibt die Funktion true zurück, und die if-Anweisung wird entsprechend ausgeführt.
Bei assoziativen Arrays kann man mittels array_key_exists($key, $array) überprüfen, ob ein Schlüssel in dem Array existiert:
<?php $mitarbeiter = array("Bob" => "Baumeister", "Klaus" => "Muster"); $key = "Bob"; if(array_key_exists($key, $mitarbeiter)) { echo "Das Element $key hat den Wert: ".$mitarbeiter[$key]; } else { echo "Das Array hat keinen Schlüssel $key"; } ?>
Über die Elemente eines Arrays iterieren
Siehe Artikel Über die Elemente eines Arrays iterieren.
Mittels der Funktion count($array) lässt sich die Anzahl der Elemente eines Arrays bestimmen. Somit lässt sich eine entsprechende for-Schleife nutzen um alle Elemente zu durchlaufen. Alternativ kann ebenfalls die foreach-Schleife genutzt werden. Für assoziative Arrays greift man für gewöhnlich auf eine foreach-Schleife zurück, da dort keine aufsteigenden Indizes mehr existieren.
<?php $namen = array("Klaus", "Anna", "Dieter"); echo "<br> Durchlaufen des Arrays mittels for-Schleife: "; for($i=0; $i<count($namen); $i++) { echo $namen[$i].", "; } echo "<br> Durchlaufen des Arrays mittels foreach-Schleife: "; foreach($namen AS $name) { echo $name.", "; } ?>
Arrays sortieren
Siehe Artikel Arrays sortieren.
Arrays lassen sich mittels der Funktion sort() aufsteigend sortieren (a nach z). Mittels der Funktion rsort() lässt sich ein Array absteigend sortieren (z nach a).
<?php $namen = array("Klaus", "Dieter", "Anna", "Melissa", "arne"); sort($namen); echo implode(", ", $namen); ?>
Im obigen Script ist die Ausgabe: Anna, Dieter, Klaus, Melissa, arne.
Es mag überraschen, dass arne am Ende des Arrays steht. Dies kommt durch den Kleinbuchstaben, diese werden erst nach den Großbuchstaben sortiert. Möchtet ihr, dass arne nach Anna sortiert wird, müsst ihr die Funktion natcasesort($namen) verwenden.
Nützliche Array Funktionen
Für das Arbeiten mit Arrays gibt es eine Reihe von nützlichen Array Funktionen . Im folgenden findet ihr eine Auflistung der Wichtigsten:
- array_key_exists($key, $array) - Überprüft, ob der Schlüssel $key im $array existiert.
- count($array) - Gibt die Anzahl der Elemente im Array zurück.
- in_array($suchwert, $array) - Überprüft, ob der Wert $suchwert im $array existiert.
- sort($array) - Sortiert ein Array aufsteigend, vom kleinsten zum größten Wert (A -> Z).
- rsort($array) - Sortiert ein Array absteigend, vom größten zum kleinsten Wert (Z -> A).
- shuffle($array) - Mischt zufällig die Elemente des Arrays.