öffentlich
Redaktion Druckversion

PHP lernen (2): Grundlagen der Syntax

Arrays

In Teil 1 haben wir über Datentypen gesprochen. Dabei wurden Arrays kurz angesprochen, aber nicht weiter erläutert. Wir beschäftigen uns hier ausgiebig mit Arrays, wie man sie definiert und auf die Elemente zugreift. Wenn Sie später mit Schleifen arbeiten, können Sie Arrays auch bequem in Schleifen verarbeiten.

Es gibt indizierte Arrays mit einem automatischen Index und assoziative Arrays mit einem selbst benannten Schlüssel. Arrays können beliebig viele Dimensionen haben, dazu unten mehr.

nach oben

Indizierte Arrays

Arrays sind Listen von Werten, sozusagen mehrere einzelne Variablen. Sie werden wie Variablen durch das Dollarzeichen $ bezeichnet und verfügen zusätzlich über einen Index, der mit eckigen Klammern [] angesprochen wird.

Eine einfache Liste wie "Apfel, Birne, Banane usw." bildet ein skalares oder indiziertes Array. Eine solche Liste verfügt automatisch über einen Index. Das erste Element eines solchen Arrays hat den Index 0. Sie können einem Array Werte zuweisen, indem Sie jeden einzelnen Wert bestimmen:

$obst[0] = "Apfel";
$obst[1] = "Birne";

Wenn Sie den Index weglassen, werden die weiteren Elemente hinten angehängt:

$obst[] = "Banane";   // $obst[2] ist "Banane"
$obst[] = "Mango";    // $obst[3] ist "Mango"

Sie können auch mit der Funktion array() mehrere Werte zugleich zuweisen:

$gemuese = array("Tomate", "Gurke", "Paprika", "Zucchini");
$gemuese[] = "Aubergine";   // $gemuese[4] ist Aubergine

print "Das dritte Gemüse ist eine " . $gemuese[3];
print "<br/>";
print "Das vierte Gemüse ist eine " . $gemuese[4];

/* Dieses Beispiel erzeugt die Ausgabe:
Das dritte Gemüse ist eine Zucchini
Das vierte Gemüse ist eine Aubergine
*/

Beachten Sie, dass der Index immer mit 0 und nicht mit 1 beginnt!

Sie können dieses Array übrigens auch sortieren. Beschreibungen von Array-Funktionen finden Sie wie üblich im Handbuch. Benutzen Sie dafür sort() bzw. rsort().

Um sich über alle Elemente in einem Array klar zu werden, kann man sie bequem zum Testen mit print_r() ausgeben. Das sieht im Browser manchmal etwas wild aus, in diesem Fall gehen Sie einfach in die Quelltextansicht, hier ist es übersichtlicher. Anhand dieser Ausgabe können Sie schnell überprüfen, was die beiden Funktionen ausgelöst haben:

print_r($gemuese);

sort($gemuese);
print_r($gemuese);

rsort($gemuese);
print_r($gemuese);

Die erste Ausgabe zeigt die Elemente in der Reihenfolge, in der sie zugeordnet wurden. Die zweite Ausgabe zeigt sie in alphabetischer, die dritte Ausgabe in umgekehrt alphabetischer Reihenfolge.

Wenn Sie sich den Umweg über die Quelltextansicht im Browser sparen wollen, können Sie um das Sprachkonstrukt print_r() herum die HTML-Tags <pre></pre> für vorformatierten Text setzen. Dann wird der aktuelle Inhalt des Arrays so ausgegeben, wie er auch im Quellcode steht.

print '<pre>';
print_r($gemuese);
print '</pre>';

sort($gemuese);
print '<pre>';
print_r($gemuese);
print '</pre>';

rsort($gemuese);
print '<pre>';
print_r($gemuese);
print '</pre>';

Assoziative Arrays

Einen Index können Sie auch selbst benennen, dann bilden Sie sogenannte Schlüssel-Wert-Paare. Ist der Index vom Typ string, muss er in Anführungszeichen stehen. Wenn Sie die Funktion array() benutzen, brauchen Sie den Zuweisungsoperator =>:

$mitglied[256] = 'Michael Meier';
$kunde['name'] = 'Michael Meier';

Im ersten Beispiel ist 256 der Schlüssel und Michael Meier der Wert dieses Array-Elements. Sie können den numerischen Schlüssel also selbst bestimmen.

Im zweiten Beispiel ist name der Schlüssel und der Wert wiederum Michael Meier. Durch den benannten Schlüssel wird das Array ein assoziatives. Das letzte Beispiel $kunde legt schon die Erweiterung nahe. Ein Array kann auch mehr als einen Schlüssel haben, dann handelt es sich um ein mehrdimensionales Array.

Mehrdimensionale Arrays

Stellen Sie sich mehrdimensionale Arrays als Tabelle vor. Die Spaltenbenennung ist der Schlüssel. Der numerische Index ist automatisch enthalten, auch wenn Sie ihn nicht explizit bezeichnen. Der Vollständigkeit halber ist er als Spalte in die Tabelle eingefügt. Wir kümmern uns aber nicht ausdrücklich darum.

Spannend werden assoziative Arrays, wenn sie mehr als eine Dimension haben. Je mehr Dimensionen dazukommen, desto mehr Spalten kommen zur Tabelle hinzu:

(Index)

Name

Farbe

Form

0

Tomate

rot

rund

1

Karotte

orange

länglich

2

Gurke

grün

länglich

3

Aubergine

lila

oval

Kommen wir nun dazu, wie ein solches Array definiert wird. Auch bei mehrdimensionalen Arrays gibt es wieder mehrere Möglichkeiten der Zuweisung. Schauen wir uns zunächst noch einmal die eindimensionale, assoziative Variante an:

$gemuese = array ('name'  => 'Tomate',
                  'farbe' => 'rot', 
                  'form'  => 'rund');

// oder:

$gemuese['name'] = 'Karotte';
$gemuese['farbe'] = 'orange';
$gemuese['form']  = 'länglich'; 

print 'Eine '.$gemuese['name'].' hat die Farbe ' . $gemuese['farbe']; 
// oder auch:
print "Eine ".$gemuese["name"]." hat die Farbe " . $gemuese["farbe"]; 
// Ausgabe: Eine Karotte hat die Farbe orange

Diese Schreibweise erzeugt nur eine Dimension. Das Element mit Namen Tomate wird durch das Element mit Namen Karotte überschrieben. Benutzen Sie wieder print_r(), um sich über den Zustand des Arrays klar zu werden. Diese Ansicht zeigt uns für unser Array zurzeit Folgendes an:

print '<pre>';
print_r($gemuese);
print '</pre>';

/* erzeugt folgende Ausgabe:
Array
(
    [name] => Karotte
    [farbe] => orange
    [form] => länglich
)
*/

Um die zusätzliche Dimension zu erzeugen, machen wir uns noch einmal bewusst, dass es einen numerischen Index gibt. Sprechen wir den erst einmal gezielt an. In der zweiten Zuweisung wird er durch leere eckige Klammern repräsentiert. Das Beispiel funktioniert analog zu dem eindimensionalen Array $gemuese oben.

$gemuese = array (0 => array("name"  => "Tomate",
                             "farbe" => "rot", 
                             "form"  => "rund"),
                  1 => array("name"  => "Karotte",
                             "farbe" => "orange", 
                             "form"  => "länglich"));

$gemuese[] = array("name"  => "Gurke",
                   "farbe" => "grün",
                   "form"  => "länglich");

print '<pre>';
print_r($gemuese);
print '</pre>';

/* erzeugt folgende Ausgabe:
Array
(
    [0] => Array
        (
            [name] => Tomate
            [farbe] => rot
            [form] => rund
        )

    [1] => Array
        (
            [name] => Karotte
            [farbe] => orange
            [form] => länglich
        )

    [2] => Array
        (
            [name] => Gurke
            [farbe] => grün
            [form] => länglich
        )

)
*/
print "Eine ".$gemuese[1]["name"]." hat die Farbe " . $gemuese[1]["farbe"]; 
// Ausgabe: Eine Karotte hat die Farbe orange

Dieses Beispiel weist zunächst die Elemente Tomate und Karotte mithilfe der array()-Funktion einem neuen Array $gemuese zu. Dabei bedienen Sie sich des numerischen Indexes. Dem Index 0 werden die Eigenschaften der Tomate zugeordnet, dem Index 1 die Eigenschaften der Karotte. Die Gurke und ihre Eigenschaften werden dem nun vorhandenen Array zugeordnet, indem mit $gemuese[] ein neues Element initiiert wird und mit der array()-Funktion in dieses Element ein weiteres Array mit den Eigenschaften der Gurke geschrieben wird.

Soweit so gut. Nun macht es vielleicht aber hier mehr Sinn, statt eines numerischen Indexes für das äußere Array, also dessen erste Dimension, den Namen unseres Gemüses zu verwenden:

$gemuese = array("Karotte" => array("Farbe" => "orange", 
                                    "Form"  => "lang" ), 
                 "Tomate"  => array("Farbe" => "rot", 
                                    "Form"  => "rund" ), 
                 "Gurke"   => array("Farbe" => "gruen", 
                                    "Form"  => "lang") );

$gemuese["Aubergine"]["Farbe"] = "lila";
$gemuese["Aubergine"]["Form"]  = "lang";

Die Schreibweise hat es in sich, ist aber wirklich die übersichtlichste. Sie fügen dem Array zunächst das Element Karotte hinzu. Karotte ist zugleich der Schlüssel für ein Array im Array. Um Elemente eines mehrdimensionalen Arrays anzusprechen, bedienen Sie sich zweier Indizes:

print "Eine Karotte hat die Farbe " . $gemuese["Karotte"]["Farbe"]; 
// Ausgabe: Eine Karotte hat die Farbe orange

Zunächst wird mit dem Schlüssel Karotte ein bestimmtes Array im Array ausgewählt, sozusagen eine bestimmte Liste. Mit dem zweiten Schlüssel wird nun das genaue Element dieses Arrays bzw. der Liste Karotte angesprochen.

Der Name des Gemüses ist nun der Schlüssel der ersten Dimension. Damit wird interessant, wie man auf diesen Schlüssel zugreifen kann. PHP hält auch für Arrays eine Reihe von eigenen Funktionen bereit. Für die PHP-eigenen Array-Funktionen gibt es ein eigenes Kapitel im Handbuch auf der Website php.net.

Der Name des Schlüssels wird über die Array-Funktion key() ermittelt. Es wird dabei der Schlüssel zurückgegeben, auf deren Element der interne Zeiger des Arrays gerade steht.

print key($gemuese);      // gibt Karotte aus

print "Eine ". key($gemuese)." hat die Farbe " . $gemuese[key($gemuese)]["farbe"]; 
// Ausgabe: Eine Karotte hat die Farbe orange

Die Funktion key() gibt den aktuellen Schlüssel zurück. Um alle Schlüssel unseres Arrays zu ermitteln, benutzen Sie zusätzlich die Array-Funktionen reset() und next():

reset($gemuese);          // setze internen Zeiger auf das 1. Element
print key($gemuese);      // gibt Karotte aus
next($gemuese);           // setze internen Zeiger auf das nächste Element
print key($gemuese);      // gibt Tomate aus
next($gemuese);           // setze internen Zeiger auf das nächste Element
print key($gemuese);      // gibt Gurke aus

Sie merken natürlich sofort, dass das so nicht wirklich funktioniert, weil es viel zu viel Schreibarbeit mit sich zieht und viel zu unflexibel ist. Kommt ein Schlüssel dazu, müssen Sie den Code verändern. Wollen Sie alle Elemente eines Arrays mit den dazugehörigen Schlüsseln ausgeben, verwenden Sie eine Schleife. Darauf kommen wir im Abschnitt "Schleifen" bei den foreach-Schleifen noch einmal zurück. Merken Sie sich hier zunächst nur, dass es einen internen Zeiger im Array gibt und alle Aktionen, die Sie an Elementen eines Arrays ausüben, über diesen Zeiger steuern.

Zu den wichtigsten Array-Funktionen gehört noch die Funktion count(), mit der Sie die Anzahl der Elemente eines Arrays ermitteln können:

print count($gemuese);      // gibt 3 aus

In diesem letzten Array ist es auch interessant, nach den Schlüsseln zu sortieren:

print_r($gemuese);

ksort($gemuese);            // alphabetisch nach Schlüsseln
print_r($gemuese);

krsort($gemuese);           // umgekehrt alphabetisch nach Schlüsseln
print_r($gemuese);

Das Verständnis von mehrdimensionalen Arrays ist später für die Datenbankabfragen wichtig. Die Ergebnisse der Abfragen werden in Arrays gespeichert. Sie müssen auf diese Arrays zugreifen, um mit den einzelnen Datensätzen zu arbeiten.

Mitglied werden, Vorteile nutzen!

  • Sie können alles lesen und herunterladen: Beiträge, PDF-Dateien und Zusatzdateien (Checklisten, Vorlagen, Musterbriefe, Excel-Rechner u.v.a.m.)
  • Unsere Autoren beantworten Ihre Fragen

Inhalt

Downloads zu diesem Beitrag

Newsletter abonnieren