Appearance
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
| Merkmal | Index-Array | Assoziatives Array |
|---|---|---|
| Index | Numerisch (0, 1, 2...) | String ("name", "alter"...) |
| Zugriff | $arr[0] | $arr["schlüssel"] |
| Anwendung | Listen, Sequenzen | Objektähnliche Daten |
| Reihenfolge | Wichtig (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
forundforeachtraversiert - ✅ 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:
- Erstellen Sie ein Array mit 10 beliebigen Zahlen und sortieren Sie es absteigend
- Erstellen Sie ein assoziatives Array für eine Person (Name, Alter, Stadt) und geben Sie es aus
- Schreiben Sie ein Skript, das alle geraden Zahlen in einem Array filtert
- Erstellen Sie einen "Warenkorb" und berechnen Sie den Gesamtpreis
Häufige Fehler:
- ❌
echo $arrayverwenden → Arrays können nicht direkt mitechoausgegeben werden (verwenden Sieprint_r()odervar_dump()) - ❌
forfür assoziative Arrays verwenden → Verwenden Sie immerforeachfür assoziative Arrays - ❌ Nach
sort()den Index erwarten →sort()setzt Indizes zurück (0, 1, 2...) - ❌
unset()inforeachverwenden ohnearray_values()→ Indizes werden nicht neu geordnet
