PHP-Grundlagen: So nutzen Sie Arrays in PHP

Wer Arrays noch von alten Programmiersprachen wie Basic kennt, wird sich über ihre Fähigkeiten in PHP freuen. Hier bieten sie flexibel einsetzbare und mächtige Datenspeicher.

Arrays sind Auflistungen, können also verschiedene Daten in einer Variablen speichern. Am einfachsten weist man alle Elemente eines Arrays gleich in einem Schritt zu:

$farben = array('rot','grün','blau');

Weil die Zählung mit dem Index 0 beginnt, hat $farben[1] beispielweise den Wert grün.

Die ausführlichere Variante, das Farb-Array festzulegen, sieht so aus:

$farben[0]='rot';

$farben[1]='grün';

$farben[2]='blau';

PHP kann sich auch in dieser expliziteren Variante selbst um die Vergabe der Indizes kümmern. Dazu lässt man gegenüber dem letzten Beispiel einfach die Indexangaben weg und schreibt:

$farben[]='rot';

$farben[]='grün';

$farben[]='blau';

Der Vorteil dabei ist weniger, dass man sich Schreibarbeit spart, sondern dass man sich nicht selbst um die Verwaltung der Array-Indizes kümmern muss. Das erledigt PHP für Sie. So können Sie mit dieser Methode beispielsweise an ein existierendes Array noch Elemente anhängen, ohne den nächsten verfügbaren Indexwert herausfinden zu müssen.

Indexbeginn festlegen

In manchen Fällen kann die 0 als Beginn der Indexzählung unerwünscht sein. Wenn Sie beispielsweise die Rangfolge von Mannschaften in einem Fußballturnier speichern möchten, ist $mannschaften[1] die natürlichere Bezeichnung für den Sieger. Um trotzdem in den Genuss der automatischen Indexvergabe zu kommen, legen Sie einfach den Indexwert für das erste Element selbst fest und lassen für alle anderen Werte PHP den Vortritt.

$farben[1]='rot';

$farben[]='grün';

$farben[]='blau';

In der Einzeiler-Variante sieht das Ganze so aus:

$farben = array(1=>'rot','grün','blau');

Assoziative Arrays

Nummerische Werte sind nicht die einzige Möglichkeit, um in PHP einen Index anzugeben. Mit einem String klappt das genauso:

$vipautos['Schroeder'] ='Audi';

$vipautos['Stoiber'] = 'BMW';

Solche Arrays heißen "assoziativ", denn sie setzen ja zwei Begriffe in Beziehung, den Indexausdruck und seinen jeweiligen Array-Wert.

Die Definition des Arrays in einer Zeile sieht hier so aus:

$vipautos=array('Schroeder'=>'Audi','Stoiber'=>'BMW');

Bei einem nummerischen Array ist das Durcharbeiten aller Elemente mit einer einfachen for-Schleife erledigt:

$maxindex = sizeof($farben);

for ($i=0; $i<$maxindex; $i++){

echo "Farbe $i hat den Wert {$farben[$i]}<br/>";

}

Bei assoziativen Arrays klappt das so natürlich nicht, denn der Index ist ja nicht durch einfaches Hochzählen ermittelbar. Das Iterieren über alle Elemente eines assoziativen Arrays erledigen Sie am besten mit dem foreach-Befehl:

foreach($vipautos as $politiker=>$auto){

echo "$politiker fährt $auto<br/>";

}

Bei jedem Schleifendurchgang enthält also $politiker den Namen des Index und $auto den jeweiligen Array-Wert. Das Statement foreach funktioniert genauso bei Arrays mit nummerischem Index, so dass Sie am besten immer diesen Ansatz verwenden.

Neben der kompakten Schreibweise hat foreach noch den Vorteil, dass Lücken berücksichtigt werden. Denn Ihr Programm könnte ja mit folgendem Code die Farbe Blau aus dem Eingangsbeispiel eliminieren:

unset($farben[2]);

Hier würde die einfache for-Schleife ins Straucheln kommen, weil es kein Array-Element mit dem Indexwert 2 mehr gibt. Entsprechende Einstellungen der Fehlermeldungen vorausgesetzt, erhielten Sie die Warnung

Notice:Undefined offset: 2 in ...

Foreach dagegen berücksichtigt nur tatsächlich vorhandene Elemente und überspringt darum den nicht vorhandenen Index 2.

Eine typische Fragestellung bei assoziativen Arrays ist, ob es ein Element für

einen bestimmte Schlüsselwert gibt - im letzten Beispiel also etwa, ob für

Frau Merkel auch schon ein Fahrzeug definiert wurde. Dazu dient die Funktion array_key_exists():

if (!array_key_exists('Merkel',$autos))

echo 'Die Bundeskanzlerin hat kein Auto!';

Arrays schachteln

Arrays können beliebige Variablen als Elemente enthalten - also auch wieder Arrays. Dadurch sind mehrdimensionale Arrays möglich. Die GPS-Wegpunkte einer Radtour könnte man also etwa so beschreiben:

$tour[] = array('x'=>47.19,'y'=>11.98);

$tour[] = array('x'=>47.32,'y'=>12.19);

$tour[] = array('x'=>47.21,'y'=>12.31);

Eine einfache Interation über die Elemente der ersten Ebene von $tour würde dann als Ergebnis das jeweilige Array mit den beiden Koordinaten zurückliefern.

Siehe auch:

Aktualisiert am: 01.12.2006


Ihr Kommentar:


Name: