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.

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;

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>';
}
?>

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: