Lerne Coding
Arrays in PHP verwenden
22.02.2020

Arrays in PHP verwenden! Was sind Arrays?

Inhaltsverzeichnis
[[TABLE OF CONTENTS]]
access_timeGeschätzte Lesezeit ca. 8 Minuten

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?

  • Alle Wochentage, alle Monate
  • Links zu Webseiten
  • Die Benutzer einer Webseite
  • Alles was sich Gruppieren Lässt

Welche Typen von Arrays gibt es?

In PHP spricht man oft von drei verschiedenen Array-Typen.

  • Numerisch indizierte Arrays
  • Assoziative Arrays
  • Mehrdimensionale Arrays

Numerisch indizierte Arrays

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"];

Werte aus dem Array abrufen

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

Neue Werte zuweisen und bestehende Werte Überschreiben

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.

Assoziative Arrays

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.

Multidimensional Arrays

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.

Elemente zu einem Lehren Array 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.

Strings in einen Array konvertieren

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.

Array in einen String konvertieren

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.

Arrays Durchsuchen in PHP

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

Arrays sortieren

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.

Über einen Array iterieren

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.

Fazit

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.

Kommentare zum Artikel
Marcus schreibt ... Kommentar vom 27.02.2021
Ausgabe von Wochentag

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?

Antworten
Marcus
Antwort von Felix Schürmeyer Kommentar vom 28.02.2021
Re: Ausgabe von Wochentag

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

Felix Schürmeyer
Kommentar schreiben

Vom Autor Empfohlen
close