Skip to content

Kapitel 7: Arrays (PHPs wichtigste Datenstruktur)

7.1 Index-Arrays + Assoziative Arrays

Index-Array (numerischer Index)

php
<?php
    // Index-Array erstellen (numerischer Index beginnt bei 0)
    $fruechte = array("Apfel", "Banane", "Kirsche");
    // Ab PHP 5.4: Kurzschreibweise
    $fruechte = ["Apfel", "Banane", "Kirsche"];
    
    // Auf Elemente zugreifen
    echo $fruechte[0];  // Apfel
    echo $fruechte[1];  // Banane
    echo $fruechte[2];  // Kirsche
    
    // Element hinzufügen
    $fruechte[] = "Orange";  // Automatisch nächster Index (3)
    array_push($fruechte, "Traube");  // Auch möglich
    
    // Array-Länge
    echo count($fruechte);  // 5
    
    // Element ändern
    $fruechte[1] = "Mango";  // Banane → Mango
    
    // Element löschen
    unset($fruechte[2]);  // Kirsche löschen
    $fruechte = array_values($fruechte);  // Indizes neu ordnen
?>

Assoziatives Array (String-Index)

php
<?php
    // Assoziatives Array (Schlüssel => Wert)
    $person = array(
        "name" => "Max",
        "alter" => 25,
        "stadt" => "Berlin"
    );
    // Kurzschreibweise
    $person = [
        "name" => "Max",
        "alter" => 25,
        "stadt" => "Berlin"
    ];
    
    // Auf Elemente zugreifen
    echo $person["name"];   // Max
    echo $person["alter"];  // 25
    
    // Element hinzufügen
    $person["email"] = "max@beispiel.de";
    
    // Element ändern
    $person["stadt"] = "München";
    
    // Element löschen
    unset($person["alter"]);
?>

Unterschied: Index-Array vs. Assoziatives Array

MerkmalIndex-ArrayAssoziatives Array
IndexNumerisch (0, 1, 2...)String ("name", "alter"...)
Zugriff$arr[0]$arr["schlüssel"]
AnwendungListen, SequenzenObjektähnliche Daten
ReihenfolgeWichtig (Index)Nicht numerisch

7.2 Zweidimensionale Arrays, mehrdimensionale Arrays

Zweidimensionales Array

php
<?php
    // Zweidimensionales Array (Array aus Arrays)
    $schueler = [
        ["name" => "Max", "note" => 1.0, "klasse" => "10A"],
        ["name" => "Anna", "note" => 1.3, "klasse" => "10A"],
        ["name" => "Tim", "note" => 2.0, "klasse" => "10B"]
    ];
    
    // Zugriff
    echo $schueler[0]["name"];   // Max
    echo $schueler[1]["note"];   // 1.3
    
    // Alle Schüler ausgeben
    foreach ($schueler as $s) {
        echo $s["name"] . ": Note " . $s["note"] . "<br>";
    }
    
    // Zweidimensionales Index-Array
    $matrix = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ];
    
    echo $matrix[0][0];  // 1
    echo $matrix[1][2];  // 6
?>

Dreidimensionales Array (und höher)

php
<?php
    // Dreidimensionales Array
    $daten = [
        "2024" => [
            "Januar" => [
                "umsatz" => 10000,
                "kosten" => 5000
            ],
            "Februar" => [
                "umsatz" => 12000,
                "kosten" => 6000
            ]
        ],
        "2025" => [
            "Januar" => [
                "umsatz" => 15000,
                "kosten" => 7000
            ]
        ]
    ];
    
    // Zugriff
    echo $daten["2024"]["Januar"]["umsatz"];  // 10000
    
    // Traversierung
    foreach ($daten as $jahr => $monate) {
        echo "<h3>$jahr</h3>";
        foreach ($monate as $monat => $werte) {
            echo "$monat: Umsatz = " . $werte["umsatz"] . "<br>";
        }
    }
?>

7.3 Array-Traversierung: for / foreach

for-Schleife (nur für Index-Arrays)

php
<?php
    $zahlen = [10, 20, 30, 40, 50];
    $laenge = count($zahlen);
    
    // Mit for-Schleife
    for ($i = 0; $i < $laenge; $i++) {
        echo "Index $i: " . $zahlen[$i] . "<br>";
    }
    
    // Achtung: for funktioniert NICHT gut für assoziative Arrays!
    $person = ["name" => "Max", "alter" => 25];
    // for ($i = 0; $i < count($person); $i++) {
    //     echo $person[$i];  // FEHLER! Schlüssel sind Strings, nicht 0,1,2...
    // }
?>

foreach-Schleife (für alle Arrays)

php
<?php
    // Index-Array
    $fruechte = ["Apfel", "Banane", "Kirsche"];
    
    // Nur Werte
    foreach ($fruechte as $frucht) {
        echo $frucht . "<br>";
    }
    
    // Schlüssel und Werte
    foreach ($fruechte as $index => $frucht) {
        echo "$index: $frucht<br>";
    }
    // Ausgabe:
    // 0: Apfel
    // 1: Banane
    // 2: Kirsche
    
    // Assoziatives Array
    $person = ["name" => "Max", "alter" => 25, "stadt" => "Berlin"];
    
    foreach ($person as $schluessel => $wert) {
        echo "$schluessel: $wert<br>";
    }
    // Ausgabe:
    // name: Max
    // alter: 25
    // stadt: Berlin
?>

foreach mit Referenz (Array ändern)

php
<?php
    $zahlen = [1, 2, 3, 4, 5];
    
    // Array ändern (mit Referenz &)
    foreach ($zahlen as &$zahl) {
        $zahl *= 2;  // Jede Zahl mit 2 multiplizieren
    }
    unset($zahl);  // WICHTIG: Referenz aufheben!
    
    print_r($zahlen);  // [2, 4, 6, 8, 10]
    
    // Ohne Referenz: Array wird NICHT geändert
    $zahlen2 = [1, 2, 3];
    foreach ($zahlen2 as $zahl) {
        $zahl *= 2;
    }
    print_r($zahlen2);  // [1, 2, 3] (unverändert)
?>

7.4 Array-Funktionen (count, in_array, array_push, sort etc.)

Array-Information

php
<?php
    $arr = ["Apfel", "Banane", "Kirsche"];
    
    // Anzahl der Elemente
    echo count($arr);        // 3
    echo sizeof($arr);       // 3 (alias für count)
    
    // Datentyp prüfen
    var_dump(is_array($arr));  // true
    
    // Leer prüfen
    $leer = [];
    var_dump(empty($leer));   // true
    var_dump(empty($arr));    // false
?>

Element suchen/hinzufügen/löschen

php
<?php
    $fruechte = ["Apfel", "Banane", "Kirsche"];
    
    // Prüfen, ob Element existiert
    var_dump(in_array("Banane", $fruechte));  // true
    var_dump(in_array("Orange", $fruechte));  // false
    
    // Element hinzufügen
    array_push($fruechte, "Orange", "Traube");  // Mehrere auf einmal
    $fruechte[] = "Mango";  // Einfacher
    
    // Element am Anfang hinzufügen
    array_unshift($fruechte, "Erdbeere");
    
    // Element entfernen (und zurückgeben)
    $letztes = array_pop($fruechte);  // Letztes Element entfernen
    $erstes = array_shift($fruechte);  // Erstes Element entfernen
    
    // Element an bestimmter Position entfernen
    unset($fruechte[1]);  // Element an Index 1 löschen
    $fruechte = array_values($fruechte);  // Indizes neu ordnen
    
    // Element suchen (Schlüssel finden)
    $index = array_search("Kirsche", $fruechte);  // 2 (Index)
    if ($index !== false) {
        echo "Gefunden an Index: $index";
    }
?>

Array sortieren

php
<?php
    $zahlen = [5, 2, 8, 1, 9];
    $namen = ["Max", "Anna", "Tim", "Berta"];
    
    // Aufsteigend sortieren (Index geht verloren!)
    sort($zahlen);
    print_r($zahlen);  // [1, 2, 5, 8, 9]
    
    // Absteigend sortieren
    rsort($zahlen);
    print_r($zahlen);  // [9, 8, 5, 2, 1]
    
    // Assoziatives Array nach Werten sortieren
    $personen = ["Max" => 25, "Anna" => 30, "Tim" => 20];
    asort($personen);  // Nach Werten (alter) aufsteigend
    print_r($personen);  // Tim=20, Max=25, Anna=30
    
    // Assoziatives Array nach Schlüsseln sortieren
    ksort($personen);  // Nach Schlüsseln (Namen) aufsteigend
    print_r($personen);  // Anna=30, Max=25, Tim=20
?>

Array-Transformation

php
<?php
    $zahlen = [1, 2, 3, 4, 5];
    
    // Array umkehren
    $umgekehrt = array_reverse($zahlen);
    print_r($umgekehrt);  // [5, 4, 3, 2, 1]
    
    // Array zusammenführen
    $arr1 = [1, 2, 3];
    $arr2 = [4, 5, 6];
    $zusammengefuegt = array_merge($arr1, $arr2);
    print_r($zusammengefuegt);  // [1, 2, 3, 4, 5, 6]
    
    // Array slicen (Teilarray extrahieren)
    $teil = array_slice($zahlen, 1, 3);  // Ab Index 1, 3 Elemente
    print_r($teil);  // [2, 3, 4]
    
    // Array in Stücke teilen
    $stuecke = array_chunk($zahlen, 2);  // In Zweier-Gruppen
    print_r($stuecke);
    // [[1, 2], [3, 4], [5]]
?>

7.5 Praxis: Schülerliste, Warenliste Array-Verarbeitung

Beispiel 1: Schülerliste verwalten

php
<?php
    // Schülerliste (assoziatives Array in Index-Array)
    $schueler = [
        ["name" => "Max Müller", "note" => 1.0, "klasse" => "10A"],
        ["name" => "Anna Schmidt", "note" => 1.3, "klasse" => "10A"],
        ["name" => "Tim Meyer", "note" => 2.0, "klasse" => "10B"],
        ["name" => "Lena Fischer", "note" => 1.7, "klasse" => "10A"],
        ["name" => "Ben Wagner", "note" => 3.0, "klasse" => "10B"]
    ];
    
    echo "<h2>Schülerliste</h2>";
    echo "<table border='1' cellpadding='5'>";
    echo "<tr><th>Name</th><th>Note</th><th>Klasse</th></tr>";
    
    $notensumme = 0;
    foreach ($schueler as $s) {
        echo "<tr>";
        echo "<td>" . $s["name"] . "</td>";
        echo "<td>" . $s["note"] . "</td>";
        echo "<td>" . $s["klasse"] . "</td>";
        echo "</tr>";
        $notensumme += $s["note"];
    }
    echo "</table>";
    
    $notenschnitt = $notensumme / count($schueler);
    echo "<p><strong>Notenschnitt:</strong> " . round($notenschnitt, 2) . "</p>";
    
    // Nur Schüler mit Note < 2.0 anzeigen
    echo "<h3>Schüler mit guter Note (< 2.0):</h3><ul>";
    foreach ($schueler as $s) {
        if ($s["note"] < 2.0) {
            echo "<li>" . $s["name"] . " (Note: " . $s["note"] . ")</li>";
        }
    }
    echo "</ul>";
?>

Beispiel 2: Warenliste (Warenkorb)

php
<?php
    // Warenkorb (Produkte mit ID, Name, Preis, Menge)
    $warenkorb = [
        ["id" => 1, "name" => "T-Shirt", "preis" => 19.99, "menge" => 2],
        ["id" => 2, "name" => "Jeans", "preis" => 49.99, "menge" => 1],
        ["id" => 3, "name" => "Sneaker", "preis" => 79.99, "menge" => 1]
    ];
    
    echo "<h2>Warenkorb</h2>";
    echo "<table border='1' cellpadding='5'>";
    echo "<tr><th>Produkt</th><th>Einzelpreis</th><th>Menge</th><th>Gesamtpreis</th></tr>";
    
    $gesamtsumme = 0;
    foreach ($warenkorb as $produkt) {
        $gesamtpreis = $produkt["preis"] * $produkt["menge"];
        $gesamtsumme += $gesamtpreis;
        
        echo "<tr>";
        echo "<td>" . $produkt["name"] . "</td>";
        echo "<td>" . number_format($produkt["preis"], 2, ',', '.') . " €</td>";
        echo "<td>" . $produkt["menge"] . "</td>";
        echo "<td>" . number_format($gesamtpreis, 2, ',', '.') . " €</td>";
        echo "</tr>";
    }
    echo "<tr><td colspan='3'><strong>Gesamtsumme</strong></td>";
    echo "<td><strong>" . number_format($gesamtsumme, 2, ',', '.') . " €</strong></td></tr>";
    echo "</table>";
    
    // Produkt zum Warenkorb hinzufügen
    $neues_produkt = ["id" => 4, "name" => "Mütze", "preis" => 14.99, "menge" => 3];
    $warenkorb[] = $neues_produkt;  // Hinzufügen
    
    // Produkt aus Warenkorb entfernen (ID 2)
    foreach ($warenkorb as $index => $produkt) {
        if ($produkt["id"] == 2) {
            unset($warenkorb[$index]);
        }
    }
    $warenkorb = array_values($warenkorb);  // Indizes neu ordnen
?>

Zusammenfassung

In diesem Kapitel haben Sie:

  • ✅ Index-Arrays und assoziative Arrays erstellt
  • ✅ Zweidimensionale und mehrdimensionale Arrays verstanden
  • ✅ Arrays mit for und foreach traversiert
  • ✅ Wichtige Array-Funktionen (count, in_array, array_push, sort, etc.) verwendet
  • ✅ Praxisbeispiele (Schülerliste, Warenkorb) erstellt

Nächstes Kapitel: Wir werden Funktionen lernen (Definition, Parameter, Rückgabewerte).


Übungsaufgaben:

  1. Erstellen Sie ein Array mit 10 beliebigen Zahlen und sortieren Sie es absteigend
  2. Erstellen Sie ein assoziatives Array für eine Person (Name, Alter, Stadt) und geben Sie es aus
  3. Schreiben Sie ein Skript, das alle geraden Zahlen in einem Array filtert
  4. Erstellen Sie einen "Warenkorb" und berechnen Sie den Gesamtpreis

Häufige Fehler:

  • echo $array verwenden → Arrays können nicht direkt mit echo ausgegeben werden (verwenden Sie print_r() oder var_dump())
  • for für assoziative Arrays verwenden → Verwenden Sie immer foreach für assoziative Arrays
  • ❌ Nach sort() den Index erwarten → sort() setzt Indizes zurück (0, 1, 2...)
  • unset() in foreach verwenden ohne array_values() → Indizes werden nicht neu geordnet

Frei für alle Anfänger