====== 1.8.4) Mehrdimensionale Felder ======
===== Mehrdimensionale indizierte Felder erstellen =====
==== Grundlagen zu mehrdimensionalen Feldern ====
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.
{{:inf:php:php53-59-1.jpg?700|}}
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''.
==== Mit mehrdimensionalen indizierten Feldern arbeiten ====
Ein mehrdimensionales indiziertes Feld hat statt //eines// Indexes - in Abhängigkeit von der Anzahl der Verschachtelungen - //mehrere// Indizes.
=== Syntax eines mehrdimensionalen indizierten Feldes ===
Die bereits erwähnten Informationen sollen im Folgenden als mehrdimensionales Feld realisiert werden.
=== Auf eine bestimmte Angabe in einem mehrdimensionalen indizierten Feld zugreifen ===
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".
=== Ein mehrdimensionales indiziertes Feld erweitern ===
$person[3][0] = "Johanna";
$person[3][1] = "schwedisch";
$person[3][2] = "19 Jahre";
oder alternativ:
$person[] = array("Johanna", "schwedisch", "19 Jahre");
\\
===== Mit mehrdimensionalen assoziativen Feldern arbeiten =====
==== Syntax eines mehrdimensionalen assoziativen Feldes ====
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.
==== Auf eine bestimmte Angabe in einem mehrdimensionalen assoziativen Feld zugreifen ====
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";
==== Ein mehrdimensionales assoziatives Feld erweitern ====
$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");
\\
===== Daten aus mehrdimensionalen Feldern extrahieren =====
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;
* Der Funktion list () wird das entsprechende Element übergeben, das in die angegebenen Variablen aufgeteilt werden soll.
* Die Variablen werden nacheinander, durch Kommata voneinander getrennt, in den runden Klammern der Funktion list () angegeben.
* Die Anzahl und die Position der Variablen richten sich nach der Anzahl der Elemente im Feld.
* Bei der an dieser Stelle verwendeten Variablen $wert handelt es sich um die Variable, die als letztes Argument in der foreach () -Schleife definiert wurde.
**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.
{{:inf:php:php53-61-1.jpg?700|}}\\
{{:inf:php:php53-62-1.jpg?700|}}
(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.
{{:inf:php:php53-62-2.jpg?600|}}
\\
Beispiel aus SÜ
';
}
// 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 '
';
}
?>
====== Verwenden des passenden Feldtyps ======
Der passende Feldtyp hängt von den Daten ab, die Sie in der Feldvariablen speichern wollen. Die folgende Tabelle soll Ihnen bei der Auswahl des Feldvariablentyps helfen:
{{:inf:php:php53-63-1.jpg?700|}}