Arrays


Buchtipp: Suchmaschinen-Optimierung: Das umfassende Handbuch
Buchtipp: Suchmaschinen-Optimierung: Das umfassende Handbuch

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.

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 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:

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:

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.

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

sort($namen);
foreach($namen AS $name) {
  echo "$name, ";
}
?>

 

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 exisitert.
  • count($array) - Gibt die Anzahl der Elemente im Array zurück.
  • in_array($suchwert, $array) - Überprüft, ob der Wert $suchwert im $array exisitert.
  • 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.
Autor: