Mehrdimensionale Arrays

Geschätzte Lektüre: 12 Minuten 323 Ansichten

Bevor wir zu mehrdimensionalen Arrays kommen, müssen wir grundlegende Arrays verstehen. Ein Array in PHP ist eine geordnete Map, die Werte (Elemente) unter bestimmten Schlüsseln speichert. Man kann sich ein Array wie eine Schublade vorstellen, in der man mehrere Dinge aufbewahrt, die man jeweils mit einem Namen oder einer Nummer versehen kann.

Eindimensionales Array (Grundlage)

$einfachesArray = array("Apfel", "Banane", "Orange");
// oder ab PHP 5.4:
$einfachesArray = ["Apfel", "Banane", "Orange"];

Hier haben wir ein einfaches Array mit drei Elementen, die automatisch die Indizes 0, 1 und 2 erhalten.

Mehrdimensionale Arrays

Ein mehrdimensionales Array ist ein Array, das andere Arrays als Elemente enthält. Man kann sich das wie eine Schublade mit mehreren kleineren Schubladen darin vorstellen.

Warum mehrdimensionale Arrays?

Mehrdimensionale Arrays sind nützlich, um komplexere Datenstrukturen darzustellen, wie z.B.:
• Tabellen (Zeilen und Spalten)
• Schachbretter
• Produktkataloge mit Kategorien und Artikeln
• Schülerlisten mit Klassen und Schülern

Arten mehrdimensionaler Arrays

Zweidimensionales Array (Array von Arrays)

Das ist die einfachste Form eines mehrdimensionalen Arrays.
Beispiel 1: Eine einfache Tabelle

$schuelerNoten = array(
    array("Max", 4, 3, 2),
    array("Anna", 1, 1, 2),
    array("Julia", 3, 2, 1)
);

Hier haben wir ein Array, das drei weitere Arrays enthält. Jedes innere Array repräsentiert einen Schüler mit Namen und drei Noten.

Visualisierung:

Schüler | Note1 | Note2 | Note3
------------------------------
Max     |   4   |   3   |   2
Anna    |   1   |   1   |   2
Julia   |   3   |   2   |   1

Beispiel 2: Assoziatives zweidimensionales Array

$produkte = array(
    "Obst" => array("Apfel" => 1.20, "Banane" => 0.99),
    "Gemüse" => array("Karotte" => 0.80, "Brokkoli" => 1.50)
);

Hier verwenden wir für beide Ebenen benannte Schlüssel (Strings statt Zahlen).

Dreidimensionales Array

Ein dreidimensionales Array kann man sich wie einen Würfel vorstellen: Es hat Ebenen, Zeilen und Spalten.

Beispiel: Schuldaten

$schule = array(
    "Klasse 5a" => array(
        "Schueler" => array("Max", "Anna", "Julia"),
        "Lehrer" => array("Herr Müller", "Frau Schmidt")
    ),
    "Klasse 6b" => array(
        "Schueler" => array("Tom", "Lisa", "Paul", "Sarah"),
        "Lehrer" => array("Frau Weber", "Herr Klein")
    )
);

Zugriff auf Elemente

Zugriff in zweidimensionalen Arrays

// Numerische Indizes
echo $schuelerNoten[0][0]; // Ausgabe: Max
echo $schuelerNoten[1][2]; // Ausgabe: 2 (Annas dritte Note)

// Assoziatives Array
echo $produkte["Obst"]["Apfel"]; // Ausgabe: 1.20

Zugriff in dreidimensionalen Arrays

echo $schule["Klasse 5a"]["Schueler"][0]; // Ausgabe: Max
echo $schule["Klasse 6b"]["Lehrer"][1]; // Ausgabe: Herr Klein

Mehrdimensionale Arrays durchlaufen

Mit foreach-Schleifen

Beispiel 1: Zweidimensionales Array

foreach ($schuelerNoten as $schueler) {
    echo "Schüler: " . $schueler[0] . "<br>";
    echo "Noten: " . $schueler[1] . ", " . $schueler[2] . ", " . $schueler[3] . "<br><br>";
}

Beispiel 2: Assoziatives Array

foreach ($produkte as $kategorie => $items) {
    echo "<h3>$kategorie</h3>";
    foreach ($items as $name => $preis) {
        echo "$name: €$preis<br>";
    }
}

Mit for-Schleifen

Für Arrays mit numerischen Indizes:

for ($i = 0; $i < count($schuelerNoten); $i++) {
    for ($j = 0; $j < count($schuelerNoten[$i]); $j++) {
        echo $schuelerNoten[$i][$j] . " ";
    }
    echo "<br>";
}

Praktische Anwendungsfälle

Einkaufsliste mit Kategorien

$einkaufsliste = [
    "Obst" => ["Äpfel" => 5, "Bananen" => 6, "Orangen" => 3],
    "Gemüse" => ["Karotten" => 10, "Tomaten" => 8],
    "Milchprodukte" => ["Milch" => 2, "Käse" => 3, "Joghurt" => 4]
];

// Gesamtzahl aller Artikel berechnen
$gesamt = 0;
foreach ($einkaufsliste as $kategorie => $artikel) {
    foreach ($artikel as $name => $anzahl) {
        $gesamt += $anzahl;
    }
}
echo "Gesamtzahl der Artikel: $gesamt";

Tic-Tac-Toe-Spielfeld

$spielfeld = [
    [" ", " ", " "],
    [" ", " ", " "],
    [" ", " ", " "]
];

// Setze ein X in die Mitte
$spielfeld[1][1] = "X";

// Spielfeld anzeigen
for ($i = 0; $i < 3; $i++) {
    for ($j = 0; $j < 3; $j++) {
        echo "[" . $spielfeld[$i][$j] . "]";
    }
    echo "<br>";
}

Kontaktverwaltung

$kontakte = [
    [
        "name" => "Max Mustermann",
        "email" => "max@example.com",
        "telefon" => "0123456789",
        "adresse" => [
            "straße" => "Musterstraße 1",
            "plz" => "12345",
            "stadt" => "Musterstadt"
        ]
    ],
    [
        "name" => "Erika Musterfrau",
        "email" => "erika@example.com",
        "telefon" => "9876543210",
        "adresse" => [
            "straße" => "Beispielweg 2",
            "plz" => "54321",
            "stadt" => "Beispielstadt"
        ]
    ]
];

// Kontakt hinzufügen
$neuerKontakt = [
    "name" => "Tom Test",
    "email" => "tom@test.com",
    "telefon" => "555123456",
    "adresse" => [
        "straße" => "Testallee 3",
        "plz" => "11111",
        "stadt" => "Teststadt"
    ]
];
$kontakte[] = $neuerKontakt;

// Kontakte anzeigen
foreach ($kontakte as $kontakt) {
    echo "<h2>" . $kontakt["name"] . "</h2>";
    echo "Email: " . $kontakt["email"] . "<br>";
    echo "Telefon: " . $kontakt["telefon"] . "<br>";
    echo "Adresse: " . $kontakt["adresse"]["straße"] . ", " . 
         $kontakt["adresse"]["plz"] . " " . $kontakt["adresse"]["stadt"] . "<br><br>";
}

Nützliche Funktionen mit mehrdimensionalen Arrays

count() mit mehrdimensionalen Arrays

$anzahlSchueler = count($schuelerNoten); // Anzahl der Schüler (äußeres Array)
$anzahlNoten = count($schuelerNoten[0]); // Anzahl der Noten pro Schüler (inneres Array)

Für die Gesamtzahl aller Elemente in einem mehrdimensionalen Array:

function count_recursive($array) {
    $count = 0;
    foreach ($array as $item) {
        $count += is_array($item) ? count_recursive($item) : 1;
    }
    return $count;
}

echo count_recursive($schuelerNoten); // Gibt die Gesamtzahl aller Elemente aus

array_multisort() : Sortieren von mehrdimensionalen Arrays:

// Datenarray
$daten = array(
    array("name" => "Max", "alter" => 23),
    array("name" => "Anna", "alter" => 19),
    array("name" => "Julia", "alter" => 21)
);

// Extrahiere die 'alter'-Spalte zum Sortieren
$alter = array();
foreach ($daten as $key => $row) {
    $alter[$key] = $row['alter'];
}

// Sortiere $daten nach $alter aufsteigend
array_multisort($alter, SORT_ASC, $daten);

print_r($daten);

Tipps und Best Practices

  1. Konsistente Struktur: Stellen Sie sicher, dass alle Unterarrays dieselbe Struktur haben, wenn sie dieselbe Art von Daten enthalten.
  2. Lesbarkeit: Für komplexe Strukturen können Sie die Array-Definition über mehrere Zeilen aufteilen, wie in den Beispielen gezeigt.
  3. Kommentare: Fügen Sie Kommentare hinzu, um die Struktur des Arrays zu erklären, besonders bei mehr als zwei Dimensionen.
  4. Assoziative Arrays: Verwenden Sie nach Möglichkeit benannte Schlüssel (assoziatives Array), da dies den Code lesbarer und wartbarer macht.
  5. Tiefe: Vermeiden Sie übermäßig tief verschachtelte Arrays (mehr als 3-4 Ebenen), da diese schwer zu verwalten sind.

Unersetzlich

Mehrdimensionale Arrays sind ein unersetzliches Werkzeug in PHP, um komplexe Datenstrukturen zu organisieren. Mit der Zeit werden Sie ein Gefühl dafür entwickeln, wann ein mehrdimensionales Array die beste Lösung ist und wie Sie es optimal strukturieren. Die wichtigsten Punkte zum Merken sind:

  1. Ein mehrdimensionales Array ist ein Array von Arrays
  2. Sie können numerische oder assoziative Schlüssel verwenden
  3. foreach-Schleifen sind oft die eleganteste Lösung zum Durchlaufen
  4. Halten Sie die Struktur so einfach wie möglich
  5. Kommentieren Sie komplexe Array-Strukturen
Dieses Dokument teilen

Mehrdimensionale Arrays

Oder Link kopieren

INHALT

Abonnieren

×
Cancel