Arrays sind Datenstrukturen, die verschiedene Elemente aufbewahren können. Umgangssprachlich kann man ein Array auch als Liste von Elemente beschreiben. Ein Array kann Elemente von verschiedenen Datentypen in PHP enthalten, es gibt Sprachen, wo der Typ für die einzelnen Elemente klar definiert sein muss.
Über ein Array können wir eine Variable als Schuhkarton betrachten. Er kann ganz viele andere Elemente enthalten; anders als eine Variable, die nur einen String enthält, kann ein Array mehrere Strings enthalten.
Was könnte man in einem Array ablegen?
In PHP spricht man oft von drei verschiedenen Array-Typen.
Ein numerisch indizierter Array wird über einen Index von Zahlen angesteuert. Nun möchte ich euch einmal zeigen, wie ein Array erstellt werden kann. Es gibt zwei sehr geläufige Möglichkeiten, ein Array zu erstellen. In unserem Beispiel verwenden wir die Wochentage, die wir im Array haben wollen.
Als Erstes die klassische Variante zum Erstellen von Arrays über "array();".
$wochentage = array("Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag");
Seit PHP 5.4 gibt es auch die Möglichkeit, direkt über eckige Klammern den Array zu definieren. Diese Variante ist etwas kürzer zu schreiben, ich bevorzuge sie daher auch. Allerdings kann ich auch verstehen, die Variante mit array() zu verwenden, da der Datentyp dort noch einmal ausgeschrieben ist, was ein kleiner Vorteil sein kann.
$wochentage = ["Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag"];
So, warum heißt dieser Array jetzt numerisch indizierter Array?
Werte können wir über den Index abrufen. Dieser ist bei den numerisch indizierten Arrays von 0 startend, was heißt, dass der Mittwoch nicht das 3. Element ist, sondern das 2. Element. Die bei 0 angefangene Zählweise ist gängige Praxis in der Informatik.
Wollen wir nun den Donnerstag haben, müssen wir uns das 3. Element holen. Mit echo können wir uns nun den String "Donnerstag" ausgeben lassen.
echo $wochentage[3];
Du kannst bestehende Werte überschreiben oder auch neue dranhängen. Das geht wie folgt: Wenn wir den Donnerstag zu einem Freitag machen wollen, können wir das Folgende tun.
$wochentage[3] = "Freitag";
Um einen zusätzlichen Tag am Ende des Array hinzuzufügen, brauchen wir die folgende Syntax:
$wochentage[] = "Supertag";
Und nun haben wir eine Woche mit 2x Freitag und einem Supertag nach dem Sonntag.
Ein assoziatives Array ist immer eine Zuordnung aus Key und Value, umgangssprachlich spricht man vom "Key-Value-Pair". Diese Paare benötigt man immer bei assoziativen Arrays. Wir wollen einem Key etwas zuordnen.
Zum Beispiel wollen wir den Wochentagen einen Mitarbeiter zuordnen, da dieser immer am entsprechenden Tag arbeiten soll. Ein Array dafür können wir mit beiden Varianten aus dem ersten Beispiel erstellen; wichtig ist nur, dass wir dort intern den => zum Darstellen der Zuordnung verwenden.
$arbeitsPlan = [
"Montag" => "Emma",
"Dienstag" => "Felix",
"Mittwoch" => "Ella",
"Donnerstag" => "Fynn",
"Freitag" => "Leon",
"Samstag" => "Paul",
"Sonntag" => "Leon"
]
Nun haben wir einen Arbeitsplan und wissen, wer am welchen Tag der Woche arbeiten muss.
Anschließend können wir das auch wie folgt abrufen:
echo $arbeitsPlan["Freitag"] // Leon
Nun wissen wir, dass am Freitag Leon arbeiten muss. Über diese Keys können wir nun auch wieder andere Mitarbeiter den Wochentagen zuweisen.
Jetzt haben wir aber ein Problem! Was ist, wenn wir mehrere Mitarbeiter an einem Tag haben? Dann bräuchten wir ja eine Liste in einer Liste. Genauer gesagt: Wir brauchen multidimensionale Arrays. Damit wollen wir uns jetzt beschäftigen.
Ein multidimensionaler Array kann unendlich tiefe Verschachtelungen haben, die Anzahl ist nicht begrenzt. Er eignet sich zum Beispiel bei Webseiten, um Navigationsstrukturen zu speichern.
Oder, wie in unserem Beispiel, um einen Arbeitsplan mit mehren Mitarbeitern pro Wochentag zu erstellen. Diese Struktur will ich euch jetzt einmal zeigen.
$arbeitsPlan = [
"Montag" => ["Emma","Noah"],
"Dienstag" => ["Felix","Emma"],
"Mittwoch" => ["Ella","Noah"],
"Donnerstag" => ["Fynn","Leon"],
"Freitag" => ["Leon","Paul"],
"Samstag" => ["Paul","Emma"],
"Sonntag" => ["Leon","Felix"],
]
Nun haben wir pro Tag zwei Mitarbeiter zugeordnet. Was man in unserem Beispiel nun auch noch sieht: Wir haben eine Kombination aus assoziativen und numerisch indizierten Arrays. Die Mitarbeiter pro Tag sind numerisch Indiziert. Um nun Fynn für Montag als zweite Besetzung einzutragen, können wir Folgendes tun:
$arbeitsPlan["Montag"][1] = "Fynn";
Wir erinnern uns daran, dass man immer bei 0 zu zählen anfängt. So ist die zweite Position der Key Nummer Eins. Um nun einen weiteren Mitarbeiter für den Montag in den Array hinzuzufügen, können wir das Folgende machen:
$arbeitsPlan["Montag"][] = "Felix";
Wir sagen wieder, uns ist der Key egal, wir wollen ein neues Element ans Ende hinzufügen.
Um einen leeren Array zu erstellen, haben wir zwei Möglichkeiten:
$kunden = array();
$besucher = [];
Und nun können wir wie gewohnt über die Schreibweise mit eckigen Klammern neue Elemente hinzufügen:
$kunden[] = "Thomas Müller";
Nun haben wir in Kunden ein neues Element erstellt, dem wir Thomas Müller zugewiesen haben.
Manchmal kommt es vor, dass man Strings bekommt und diese als Array benötigt. Zum Beispiel sendet der Kunde euch eine durch Kommata separierte Liste von Automarken, ihr braucht diese aber als Array, um damit weiter arbeiten zu können. Dafür gibt es die explode() Funktion.
$automarken = "VW,BMW,Audi,Mazda";
$autoMarkenArray = explode(",",$automarken);
Bei der explode() Funktion ist der erste Wert der Delimiter. Dieser ist das Trennzeichen, an dem eure Werte getrennt werden sollen. Dafür könnt ihr auch Leerstellen bzw. Wörter nehmen, alles ist möglich. Wichtig ist nur, dass der Delimiter ein String ist.
Manchmal kann es vorkommen, dass ihr Arrays für den Nutzer nun ausgeben wollt. Dafür gibt es auch eine Funktion, nämlich den sogenannten implode(). Dieser arbeitet im Prinzip genau gegenteilig zum explode(). Das kann man sich sehr gut über implodieren und explodieren merken, auseinander gehen oder zusammen gehen.
$automarkenString = implode(" ",$autoMarkenArray);
echo $automarkenString
// Ausgabe: VW BMW Audi Mazda
Nun könnt ihr die Elemente gut leserlich für den Nutzer mittels echo ausgeben lassen.
In PHP gibt es zwei verschiedene Funktionen. Eine dient zum Suchen von Values und eine zum Suchen von Keys. Um in Values zu suchen, sollte man die Funktion in_array verwenden. Um auf einen Key zu prüfen, kann man array_key_exists verwenden.
Für das Beispiel verwenden wir folgenden Array:
$fahrzeuge = ["Auto","LKW","Truck","Mottorad","Mofa","Transporter"];
Um nun zu überprüfen, ob "Auto" im Array ist, können wir Folgendes tun:
in_array("Auto",$fahrzeuge); // Rückgabewert: true
Als Rückgabewert erhalten wir einen Boolean der entweder true oder false sein kann, in diesem Fall wird er true sein.
Um nun nach den Keys zu suchen, benötigen wir nicht unbedingt einen assoziativen Array, wir können auch auf den Index prüfen.
array_key_exists(3,$fahrzeuge); // Rückgabewert: true
Es gibt viele verschiedene Möglichkeiten zum Sortieren von Arrays, die einfachste ist die sort() Funktion. Dabei werden die Werte von A bis Z sortiert.
$fahrzeuge = ["Auto","LKW","Truck","Mottorad","Mofa","Transporter"];
sort($fahrzeuge);
// ["Auto","LKW","Mofa","Mottorad","Transporter","Truck"];
Das Besondere an der sort() Funktion ist, dass diese mit einer Referenz von $fahrzeuge arbeitet, weshalb kein Wert zurückgegeben werden muss, sondern direkt danach mit der $fahrzeuge Variable weiter gearbeitet werden kann. Nun erhalten wir unseren sortierten Array von A nach Z. Um den Array von Z nach A zu Sortieren brauchen wir die Funktion rsort.
Um über ein Array zu iterieren, gibt es eine sehr gute Möglichkeit, die sich foreach-Schleife nennt. Der Vorteil gegenüber der foreach-Schleife ist, dass wir keine Counter-Variable mehr haben und nicht wissen müssen, wie viele Elemente im Array vorhanden sind.
$fahrzeuge = ["Auto","LKW","Truck","Mottorad","Mofa","Transporter"];
foreach($fahrzeuge as $fahrzeug){
echo $fahrzeug;
}
Nun erhalten wir unsere Fahrzeuge nacheinander ausgeben, falls wir noch den Key benötigen. Zum Beispiel können wir bei assoziativen Arrays das Folgende tun:
foreach($fahrzeuge as $key => $fahrzeug){
echo $fahrzeug;
}
Nun haben wir auch noch den $key zum Arbeiten zur Verfügung.
Arrays eignen sich gut, um mit Listen von zusammengehörigen Elementen zu arbeiten. Sie können unterschiedlich viele Elemente enthalten und können durch ihre Mehrdimensionalität unendlich tief mit weiteren Arrays verschachtelt werden. Seit PHP 5.4 gibt es die neue Schreibweise mit [] eckigen Klammern für Array-Initialisierungen. Mit sort und rsort hat man auch zwei mächtige Sortier-Funktionen an der Hand, was noch viele weitere Möglichkeiten eröffnet.
Hinterlasse mir gerne einen Kommentar zum Artikel und wie er dir weitergeholfen hat beziehungsweise, was dir helfen würde das Thema besser zu verstehen. Oder hast du einen Fehler entdeckt, den ich korrigieren sollte? Schreibe mir auch dazu gerne ein Feedback!
Guten Tag Marcus,
ich vermute das du die Funktion falsch angewendet hast. Bzw. du die Rheinfolge im Array falsch hast. Da bei der date('w')
Funktion der Zähler bei Sonntag (0) beginnt und bis Samstag (6) geht, weshalb du den falschen Wert erhältst, laut deiner Angabe startest du ja am Montag. Aber der erste Wert im Array müsste der Sonntag sein.
Mit besten Grüßen Felix
ich habe nun ein Array wochentage, in dem die Wochentage von Montag bis Freitag stehen.
Dieses übergebe ich nun in die Variable wochentag und weise diesem die Variable wochentage[date('w')] zu.
Während bei der Ausgabe $wochentage alles korrekt läuft, wird bei der Variable $wochentag plötzlich am Freitag der Samstag ausgegeben!
Eine Idee woran das liegen kan?