Im folgenden Beispiel sehen Sie mehrere Angaben (Vorname, Nationalität und Alter), die jeweils einen Eintrag in einer Feldvariablen bilden. Damit ist dieses Feld ein mehrdimensionales Feld. Bei jeder der Angaben sind Mehrfachwerte möglich. Mehrdimensionale Felder sind verschachtelte Felder, man spricht hier von äußeren und inneren Feldern.
Mehrdimensionale Felder können sowohl numerisch indiziert als auch assoziativ sein. Eine Mischform aus numerisch indizierten und assoziativen Feldern ist ebenfalls möglich. Im Beispiel bietet sich durch mögliche Mehrfachwerte z. B. ein indiziertes Feld an, das jeden Satz an Angaben mit einem eindeutigen numerischen Index versieht.
In dieser Tabelle wird bereits die Arbeitsweise mehrdimensionaler Felder ersichtlich. Um beispielsweise an die Informationen von Maria zu gelangen, suchen Sie die Zeile mit der Angabe Maria und lesen die einzelnen Werte dieser Zeile aus: Maria, deutsch, 23 Jahre.
Ein mehrdimensionales indiziertes Feld hat statt eines Indexes - in Abhängigkeit von der Anzahl der Verschachtelungen - mehrere Indizes.
Die bereits erwähnten Informationen sollen im Folgenden als mehrdimensionales Feld realisiert werden.
Ausschnitt aus der Beispieldatei„mehrdimensional.php“:
$person = array{array("Oliver", "spanisch", "37 Jahre"), array("Maria", "deutsch", "23 Jahre"), array("Oliver", "englisch", "46 Jahre")); $vornamel = $person[l][0] ; $nationalitaetl - $person[l][1] ; $alterl = $person[l][2] ;
Ergebnis:
$vorname1 = "Maria"; $nationalitaet1 = "deutsch"; $alter1 = "23 Jahre".
$person[3][0] = "Johanna"; $person[3][1] = "schwedisch"; $person[3][2] = "19 Jahre";
oder alternativ:
$person[] = array("Johanna", "schwedisch", "19 Jahre");
Die assoziativen Felder besitzen zum Ansprechen der einzelnen Elemente einen sogenannten Schlüssel. Um ein mehrdimensionales Feld anzulegen, wird jedem Schlüssel ein weiteres Feld mit Schlüssel-Wert-Paaren übergeben (Sonderfall zweidimensional). Verwenden Sie aus Gründen der Übersichtlichkeit und Nachvollziehbarkeit der Programmierung nicht mehr als drei Dimensionen bzw. Verschachtelungen.
Beispiel: mehrdimensional.php
$land = array("Spanien" => array("Hauptstadt" => "Madrid", "Sprache" => "Spanisch", "Waehrung" => "Euro", "Flaeche" => "504645 qkm"), "England" => array("Hauptstadt" => "London", "Sprache" => "Englisch", "Waehrung" => "Pfund Sterling", "Flaeche" => "130395 qkm"), "Portugal" => array("Hauptstadt" => "Lissabon", "Sprache" => "Portugiesisch", "Waehrung" => "Euro", "Flaeche" => "92345 qkm"));
Hiermit ist jeder Satz an Eintragungen mit entsprechenden Länderinformationen über einen Schlüssel mit aussagekräftiger Bezeichnung - Spanien, England oder Portugal - direkt ansprechbar.
Ausschnitt aus Beispieldatei„ mehrdimensional.php“
$hauptstadt2 = $land["Portugal"]["Hauptstadt"]; $sprache2 = $land["Portugal"]["Sprache"]; $waehrung2 = $land["Portugal"]["Waehrung"]; $flaeche2 = $land["Portugal"]["Flaeche"];
Ergebnis:
$hauptstadt2 = "Lissabon"; $sprache2 = "Portugiesisch"; $waehrung2 = "Euro"; $flaeche2 = "92345 qkm";
$land["Ungarn"]["Hauptstadt"] = "Budapest"; $land["Ungarn"]["Sprache"] = "Ungarisch"; $land["Ungarn"]["Waehrung"] = "Forint"; $land["Ungarn"]["Flaeche"] = "93036 qkm";
oder alternativ:
$land["Ungarn"] = array("Hauptstadt" => "Budapest", "Sprache" => "Ungarisch", "Waehrung => "Forint", "Flaeche" => "93036 qkm");
Bei der Arbeit mit mehrdimensionalen Feldern kommt es häufig vor, dass Sie die kompletten Daten eines inneren Feldes benötigen. Mit einer foreach-Schleife können Sie alle Werte einer Feldvariablen auslesen. Durch die Verwendung einer foreach-Schleife müssen Sie keinen Index oder Schlüssel kennen. Bei jedem Schleifendurchlauf wird das aktuelle Element in einer von Ihnen angegebenen Variablen zwischengespeichert. Hierbei handelt es sich auch um eine Feldvariable mit Angaben zum aktuellen „Datensatz“.
Syntax:
foreach($feld as $wert);
Um die einzelnen Elemente auszulesen und jeden Wert verschiedenen Variablen zu übergeben, verwenden Sie innerhalb der Schleife die list()-Funktion.
Syntax
list($variablel, $variable2, ...) = $wert;
Beispiel: array_zdim_list.php
Verschiedene Angaben zu Ländern werden in einem mehrdimensionalen Feld gespeichert. Zur Ausgabe sollen der Name des Landes, die Hauptstadt, die Sprache und die Landeswährung in separaten Variablen abgelegt werden.
(1) Das assoziative Feld $staedte wird neu definiert und mit Werten gefüllt. Die Daten enthalten Informationen zur Hauptstadt eines Landes, zur Sprache und zur im Land verwendeten Währung. Der Name des Landes selbst wird als eindeutiger Schlüssel verwendet.
(2) Mithilfe einer foreach-Schleife können Sie auf jedes Element des Feldes zugreifen, indem die Schleife so oft durchgeführt wird, bis auch das letzte Element angesprochen wurde. Da es sich in diesem Beispiel um mehrere Werte pro Element handelt, müssen die zusammenhängenden Werte eines Landes in dem neuen Feld $ausgabe zwischengespeichert werden. Im ersten Schleifendurchlauf enthält die Variable $ausgabe nur die Werte des zuerst definierten Landes Japan (Tokio, Japanisch, Yen), im zweiten Schleifendurchlauf die Werte der Niederlande etc.
(3) Über den Befehl list() werden die Daten zum gerade abgerufenen Land (Hauptstadt, Sprache und Währung) in die entsprechenden Variablen $hauptstadt, $sprache und $waehrung aufgeteilt.
(4) Über den Ausgabebefehl echo werden die Werte der Variablen am Bildschirm ausgegeben. Bei der Variablen $key handelt es sich um den Schlüssel (Landesnamen), der in (2) definiert wurde.
Beispiel aus SÜ
<?php // Nicht assoziatives Array $matrix = array ( array(1,2,3,4), array(5,6,7,8), array(9,10,11,12), array(13,14,15,16), array(17,18,19,20) ); // Ausgabe als Zeilen und Spalten for ($i=0;$i<count($matrix);$i++){ for ($j=0;$j<count($matrix[$i]);$j++) {echo $matrix[$i][$j].' ';} echo '<br>'; } // Assoziatives Array $user = array( 'person'=>array('name'=>'Thomas', 'nickname'=>'Baumi'), 'lang' =>array('deutsch','mostviertlerisch','english','spanisch','französisch'), 'kontakt'=>array('email'=>'thomas.baumgartner@bgamstetten.ac.at', 'web' =>'www.baumi.net') ); // Ausgabe foreach ($user as $eigenschaft => $arrayinhalt) { echo $eigenschaft.':'; foreach ($arrayinhalt as $index =>$wert) echo ' '.$index.' ist '.$wert.' | '; echo '<br>'; } ?>