Array
Um verschiedene Werte in nur einer Variable zu speichern, verwendet man in PHP ein Array.
Bisher konnte jede Variable nur einen Wert speichern, in PHP können in einem Array 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.
Aber PHP kann noch mehr mit Arrays anstellen.
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");?>
Einem PHP Array wird ganz normal ein Variablenamen 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:
<?php echo $wochentage[1];?>
Ausgabe: Montag
Wir geben 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 Sonntagerhalten, Montag hat die Nummer (bzw. den Index) 1 und so weiter.
Bei großen Arrays wird es natürlich irgendwann umständlich, zu wissen, welche Nummer/Index zu welchem Wert gehört, darum gibt es assoziative PHP Arrays.
Das heißt, man kann für einen Wert einen Schlüssel/Key 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");?>
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.
Der Vorteil ist, dass man jetzt bequemer auf das Array zugreifen kann:
<?php 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ürSonntag, mo für Montag und sa für Samstag.
Selbstverständlich kann man nachträglich auch Werte in einem Array verändern:
<?php $wochentage["mo"]="Monday"; echo $wochentage["mo"];?>
Ausgabe: Monday
Das selbe gilt für Arrays mit Nummer/Indexen.
Ein weiterer Vorteil ist, dass man einem Array neue Werte hinzufügen kann, diese Werte könnten z.B. aus einer Datenbank stammen.
Das ganze Funktioniert so:
<?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 Lisazugewiesen.
Wir könnten unser Array sogar so erstellen:
<?php $mitarbeiter = array(); $mitarbeiter[]="Bob"; $mitarbeiter[]="Peter"; $mitarbeiter[]="Lisa";?>
Hier wird zuerst ein leeres Array erstellt und danach werden die Mitarbeiter hinzugefügt.
Mit assoziativen PHP Arrays funktioniert dies ähnlich, aber wir müssen den Schlüssel mit angeben:
<?php $mitarbeiter = array("Bob"=>"Bob Meier","Peter"=>"Peter von Hausen"); $mitarbeiter["Lisa"]="Lisa Müller"; echo $mitarbeiter["Lisa"];?>
Ausgabe: Lisa Müller
Wenn der Schlüssel schon vergeben wurde, dann wird der Wert für die Schlüssel überschrieben.
Anzahl der Elemente
Wenn wir in einem Array dynamisch neue Elemente hinzufügen können, dann ist es sehr wichtig zu wissen, wie viele Elemente das Array überhaupt enthält, dies funktioniert mit:count($names_des_array);:
<?php $mitarbeiter = array("Bob","Peter"); echo count($mitarbeiter);?>
Ausgabe: 2
Wir erhalten als Ausgabe 2, denn in dem Array sind 2 Mitarbeiter gespeichert, der letzte Index ist allerdings 1, weil bei 0 angefangen wird zu zählen.
Um den letzten Eintrag auszugeben, müssen wir von dem Wert einfach 1 abziehen.
Elemente ausgeben
Zum Ausgeben aller Elemente in einem Array benutzt man gewöhnlich eine Schleife, dies kann eine for oder eine whileSchleife sein:
<?php $mitarbeiter = array("Bob","Peter","Lisa"); echo "For-Schleife: <br>";for($i=0; $i < count($mitarbeiter); $i++) { echo $mitarbeiter[$i]."<br>"; } echo "<br> While-Schleife: <br>"; $i =0;while($i < count($mitarbeiter)) { echo $mitarbeiter[$i]."<br>"; $i++; }?>
Beide Varianten funktionieren einwandfrei, aber es gibt noch eine 3. Schleife: foreach
<?php $mitarbeiter = array("Bob","Peter","Lisa"); echo "Foreach-Schleife: <br>";foreach($mitarbeiter AS $name) { echo $name."<br>"; }?>
Im Schleifenkopf definieren wird, dass die Werte in $namegespeichert werden soll. Unter dieser Variable können wir dann innerhalb der Schleife auf den jeweiligen Namen des Mitarbeiters zugreifen.
Suchen & Sortieren
Ein weiteres Feature ist, dass wir ein Array durchsuchen und sortieren können.
Zuerst die Suchfunktion, dies geht mitin_array($suche,$array);:
<?php $mitarbeiter = array("Bob","Peter","Lisa");if(in_array("Bob",$mitarbeiter)) { echo "Der Name Bob ist in dem Array enthalten"; }?>
Hier überprüfen wir, ob Bob in dem Mitarbeiter-Array vorhanden ist, wenn ja, gibt die Funktion true zurück, und ein Text wird ausgegeben (das Bob in dem Array vorhanden ist).
Das war auch schon das Gröbste zum Suchen, jetzt das Sortieren. Oft herrscht in so einem Array ‚Chaos‘, dass z.B. die Mitarbeiter wild hinzugefügt wurden. Möchte man jetzt eine alphabetische Liste der Mitarbeiter ausgeben, dann muss man das Array zuerst sortieren. PHP bietet dafür viele Möglichkeiten.
Möchte man die Werte sortieren, verwendet man die Funktionenasort oder arsort, wobei asort eine aufsteigende Reihenfolge (a,b,c,d) liefert und arsort eine absteigende (d,c,b,a).
Beispiel:
<?php $mitarbeiter = array("Klaus","Arnie","Willi");//Array sortieren asort($mitarbeiter);//Array ausgeben echo "Foreach-Schleife: <br>";foreach($mitarbeiter AS $name) { echo $name."<br>"; }?>
Hier wird per asort() das Array in aufsteigender Reihenfolge sortiert und danach mit foreach ausgegeben.
Um die Schlüssel (mit deren Werte), zu sortieren, verwendet man ksort oder krsort. Beispiel:
<?php $mitarbeiter = array("Zabel"=>"Klaus","Meier"=>"Arnie","Brand"=>"Willi");//Array sortieren ksort($mitarbeiter);//Array ausgeben echo "Foreach-Schleife: <br>";foreach($mitarbeiter AS $name) { echo $name."<br>"; }?>
Mehrdimensionale Arrays
In einem Array kann man ein weiteres Array, und in diesem Array wieder ein Array speichern, und so weiter. 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.
Dies geht natürlich auch mit assoziativen Arrays und der ‚anderen‘ Schreibweise:
<?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 MitarbeiterKlaus. Dabei benutzen wir diesmal gleich ein assoziatives Array.
Für Klaus wurde jetzt der Vorname und der Nachname gespeichert, dies sollte ja noch bekannt sein.
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.