Dies ist eine alte Version des Dokuments!


Arrays

Soll eine Vielzahl von Daten ähnlicher Struktur gespeichert werden, ist der Umgang mit Variablen zu unhandlich. Für Daten, die ausgedruckt in einer Liste oder in einer Tabelle ausgegeben werden, wurde der Typ Array entwickelt. Er speichert beliebig viele Werte unter einem bestimmten Variablennamen. Durch einen Array-Schlüssel ist jeder Wert innerhalb der Variable eindeutig einer Speicheradresse zugeordnet.

Indizierte Arrays

Indizierte Arrays verwenden Ganzzahlen als Schlüssel, die PHP vergibt. Durch zwei verschiedene Möglichkeiten lassen sich Arrays definieren. In der ersten Schreibweise wird der Schlüssel durch die eckigen Klammern festgelegt:

<?php
  $farbe[0] = "FFFFFF";
  $farbe[1] = "000000";
  echo $farbe[1]; //Rückgabe eines Arraywertes
?>

Ausgabe:

000000

Da PHP diese Form der Indizierung standardmäßig einsetzt, darf der Schlüsselname weggelassen werden. Der erste Index (Schlüssel) ist immer 0.

<?php
  $farbe[] = "FFFFFF";
  $farbe[] = "000000";
  $farbe[] = "FF0000";
  echo $farbe[2]; //Rückgabe des Wertes.
?>

Will man hingegen einen bestimmten Wert verändern, muss der Schlüssel angegeben werden, damit PHP weiß, welcher Wert geändert werden soll:

<?php
  $farbe[2] = "033023";
  echo "<br /> Neuer wert von \$farbe[2] ist ".$farbe[2];
?>

Ausgabe:

FF0000
Neuer wert von $farbe[2] ist 033023

Diese explizite Definition eines Arrays ist sehr aufwendig. PHP kennt die Funktion array, die einfacher zu handhaben ist und sehr viel effizienter ist:

<?php
  $weiss = "FFFFFF";
  $farbe = array("000000", "FF0000", $weiss);
  echo $farbe[2];
?>

Ausgabe:

FFFFFF

In der Funktion sind die Werte durch ein Komma getrennt. Die Schlüsselwerte werden automatisch bestimmt. Der erste Schlüssel ist wie schon erwähnt 0.
Beim bestimmen eines Arrays muss die Zahl der zu speichernden Werte im Gegensatz zu C/C++/Java usw. nicht angegeben werden.

<?php
  $farbe = array();
  $farbe[] = "FFFFFF";
  $farbe[] = "000000";
?>

Auf diese Art können beliebig viele Werte an das Array angehängt werden. PHP sorgt im Hintergrund dafür, dass das Array entsprechend vergrößert wird.

Assoziative Arrays

Schlüsselnamen müssen nicht nummerisch sein; sie können genauso einen beliebigen Wert in Form eines Strings oder einer Ganzzahl annehmen. Diese assoziativen Schlüssel werden auch Hashes genannt, besonders bei bestimmten Sprachen wie Perl und Python.

<?php
  $farbe["rot"]     = "FF0000";
  $farbe["gruen"]   = "00FF00";
  $farbe["weiss"]   = "FFFFFF";
  $farbe["schwarz"] = "000000";
  echo $farbe['schwarz']; //Rückgabe
?>

Das Verändern eines Wertes erfolgt auch hier über den Schlüsselnamen:

<?php
  $farbe["weiss"] = "003366";
  echo "<br /> Der neue Wert der Variable \$farbe['weiss'] ist nun ".$farbe["weiss"];
?>

Ausgabe:

Der neue Wert der Variable $farbe['weiss'] ist nun 003366

Für die Erzeugung assoziativer Arrays besitzt die Funktion array eine erweiterte Syntax. Durch den ⇒ Operator wird ein Schlüssel einem Wert zugeordnet:

<?php
  $weiss = "FFFFFF";
  $farbe = array("rot"     => "FF0000",
                 "gruen"   => "00FF00",
                 "weiss"   => $weiss,
                 "schwarz" => "000000");
  echo $farbe['schwarz']; //Rückgabe
?>

Ausgabe:

000000

Mehrdimensionale Arrays

Die bisherigen Beispiele bestanden aus eindimensionalen Arrays. Durch größere Dimensionen (oder auch tiefere) erfolgt eine flexiblere Speicherung der Daten. Dabei wird ein Array unterer Dimension einer Variable mit dem Schlüssel der oberen Dimension zugeordnet.

<?php
  $weiss = "FFFFFF";
  $farbe["RGB"] = array("gruen" => "00FF00", "blau" => "0000FF");
  $farbe["graustufen"] = array("schwarz" => "000000", "weiss" => "weiss");
  echo "Die Farbe Blau hat den Hex-Wert: ". $farbe["RGB"]["blau"]."<br />";
  echo "Die Farbe Schwarz hat den Hex-Wert: ".$farbe["graustufen"]["schwarz"];
?>

Ausgabe:

Die Farbe Blau hat den Hex-Wert: 0000FF
Die Farbe Schwarz hat den Hex-Wert: 000000

Die folgende Schreibweise führt zum gleichen Ergebnis:

<?php
  $weiss = "FFFFFF";
  $farbe = array("RGB" => array("gruen" => "00FF00",
                                "blau" => "0000FF"),
                                "graustufen" => array("schwarz" => "000000",
                                                      "weiss" => "weiss"));
?>

Zum Löschen eines gesamten Arrays benutzt Du den Befehl unset, der Dir bereits von den Variablen bekannt sein sollte.

<?php
  unset($farbe);
?>

Soll das Array nur geleert werden, wählst Du besser die Funktion array():

<?php
  $farbe = array();
?>

Du kannst auch einzelne Werte eines Arrays löschen:

<?php
  unset($farbe["rot"]);
?>

Ausgabe eines Arrays

Der Inhalt eines Arrays kann durch die Angabe der Variablen und des Schlüssels ausgegeben werden:

<?php
  echo $array["Schluessel"];
?>

Auf diese Weise wird nur ein Wert des Arrays zurückgegeben. Möchtest Du alle Werte erhalten, um sie entweder auszugeben oder zu bearbeiten, so sollte auf eine Schleife zurückgegriffen werden. Für Arrays bieten sich Schleifen vom Typ while an, wenn indizierte(nummerische) Schlüssel verwendet werden:

  $weiss = "FFFFFF";
  $farbe = array("000000","FF0000", $weiss);
  $i = 0;
  $counter = count($farbe);
  while($i < $counter)
  {
    echo "Farbe: ".$farbe[$i].", ";
    $i++;
  }

Ausgabe:

Farbe: 000000, Farbe: FF0000, Farbe: FFFFFF,

Die Variable $i dient im Beispiel sowohl als Zählvariable als auch zur Angabe des Schlüssels im Array. Mit der Funktion count wird die Anzahl der Werte im Array und damit die maximale Laufweite der Schleife bestimmt. Bei jedem Durchlauf wird der interne auf den Schlüssel verweisende Zeiger im Array weiter nach „rechts“ gesetzt.
Werden anstelle der Indizierten assoziativen Schlüssel benutzt, ist eine Anwendung von while nicht möglich (oder wirklich sehr aufwändig). Verwende dafür am besten foreach, welches Du schon von den Schleifen kennen solltest.

<?php
  $farbe = array("rot"     => "FF0000",
                 "gruen"   => "00FF00",
                 "weiss"   => $weiss,
                 "schwarz" => "000000");
  foreach($farbe as $schluessel => $wert)
  {
    echo "Farbe $schluessel: $wert, ";
  }
?>

Ausgabe:

Farbe rot: FF0000, Farbe gruen: 00FF00, Farbe weiss: FFFFFF, Farbe schwarz: 000000,

foreach arbeitet jedes Element des Arrays $farbe nacheinander ab. Der Schlüssel und der dazugehörige Wert werden jeweils gespeichert.
Eine Anwendung der for-Schleife ist ebenfalls denkbar. Da die zwei erklärten Lösungen jedoch genauso effektiv im Zusammenhang mit Arrays sind, wird dies hier nicht weiter ausgeführt.
Zur Ausgabe von Array-Werten sind die Funktionen var_dump oder print_r hilfreich. Sieh selbst:

<?php
  $weiss = "FFFFFF";
  $farbe = array("RGB" => array("gruen" => "00FF00",
                                "blau" => "0000FF"),
                                "graustufen" => array("schwarz" => "000000",
                                                      "weiss" => "weiss"));
  var_dump($farbe);
?>

Als Ausgabe bekommt man dann eine genaue Beschreibung aller Array-Elemente.
Ausgabe:

array(2) { ["RGB"]=> array(2) { ["gruen"]=> string(6) "00FF00" ["blau"]=> string(6) "0000FF" } ["graustufen"]=> array(2) 
{ ["schwarz"]=> string(6) "000000" ["weiss"]=> string(5) "weiss" } }

Ausformuliert bedeutet dies:
Das Array enthält 2 Dimensionen. In der ersten Dimension sind zwei Unterdimensionen definiert: RGB (mit 2 Einträgen) und Graustufen (mit ebenfalls 2 Einträgen). In jeder Dimension werden nun zuerst die Schlüssel mit der Länge des Wertes aufgeführt und anschließend der Wert selbst.

Mit diesen Erkenntnissen ausgestattet, können wir uns nun den eingebauten Funktionen von PHP widmen.