Beispiel: Schulverwaltung

Geschätzte Lektüre: 11 Minuten 521 Ansichten

Mehrdimensionalen Arrays

<?php
/*
 * SCHULVERWALTUNGSSYSTEM
 * Mehrdimensionales Array zur Darstellung von:
 * - Klassen
 * - Schülern (mit Name, Alter)
 * - Fächern
 * - Noten pro Fach
 * - Klassenlehrern
 */

// Haupt-Array der Schule mit allen Klassen
$schule = [
    // Klasse 5a
    "5a" => [
        // Metadaten der Klasse
        "klassenlehrer" => "Herr Müller",
        "anzahl_schueler" => 3,
        
        // Array aller Schüler der Klasse
        "schueler" => [
            // Erster Schüler
            [
                "name" => "Max Mustermann",
                "alter" => 10,
                // Fächer mit Noten
                "faecher" => [
                    "Mathe" => [4, 3, 2],
                    "Deutsch" => [2, 3, 2],
                    "Sport" => [1, 1, 2]
                ]
            ],
            // Zweiter Schüler
            [
                "name" => "Anna Schmidt",
                "alter" => 11,
                "faecher" => [
                    "Mathe" => [1, 2, 1],
                    "Deutsch" => [1, 1, 2],
                    "Sport" => [2, 2, 1]
                ]
            ],
            // Dritter Schüler
            [
                "name" => "Tom Weber",
                "alter" => 10,
                "faecher" => [
                    "Mathe" => [3, 3, 3],
                    "Deutsch" => [2, 2, 3],
                    "Sport" => [1, 2, 2]
                ]
            ]
        ]
    ],
    
    // Klasse 6b
    "6b" => [
        "klassenlehrer" => "Frau Schneider",
        "anzahl_schueler" => 2,
        "schueler" => [
            [
                "name" => "Julia Fischer",
                "alter" => 12,
                "faecher" => [
                    "Mathe" => [2, 2, 1],
                    "Deutsch" => [1, 1, 1],
                    "Kunst" => [1, 2, 3]
                ]
            ],
            [
                "name" => "Paul Meyer",
                "alter" => 11,
                "faecher" => [
                    "Mathe" => [3, 4, 3],
                    "Deutsch" => [3, 3, 2],
                    "Kunst" => [2, 2, 2]
                ]
            ]
        ]
    ]
];

/*
 * FUNKTIONEN ZUR DATENVERARBEITUNG
 */

/**
 * Gibt alle Klassen mit ihren Lehrern aus
 */
function klassenUebersicht($schule) {
    echo "<h2>Klassenübersicht</h2>";
    foreach ($schule as $klasse => $daten) {
        echo "Klasse $klasse - Klassenlehrer: " . $daten["klassenlehrer"] . "<br>";
        echo "Anzahl Schüler: " . $daten["anzahl_schueler"] . "<br><br>";
    }
}

/**
 * Gibt alle Schüler einer bestimmten Klasse aus
 */
function schuelerListe($schule, $klasse) {
    if (!isset($schule[$klasse])) {
        echo "Klasse $klasse existiert nicht!";
        return;
    }
    
    echo "<h2>Schülerliste für Klasse $klasse</h2>";
    foreach ($schule[$klasse]["schueler"] as $schueler) {
        echo "Name: " . $schueler["name"] . ", Alter: " . $schueler["alter"] . "<br>";
    }
}

/**
 * Berechnet den Notendurchschnitt eines Schülers in einem Fach
 */
function berechneDurchschnitt($notenArray) {
    $summe = array_sum($notenArray);
    $anzahl = count($notenArray);
    return round($summe / $anzahl, 2);
}

/**
 * Gibt die Notenübersicht für einen Schüler aus
 */
function notenUebersicht($schule, $klasse, $schuelerName) {
    echo "<h2>Notenübersicht für $schuelerName (Klasse $klasse)</h2>";
    
    // Schüler finden
    $schuelerDaten = null;
    foreach ($schule[$klasse]["schueler"] as $schueler) {
        if ($schueler["name"] == $schuelerName) {
            $schuelerDaten = $schueler;
            break;
        }
    }
    
    if (!$schuelerDaten) {
        echo "Schüler nicht gefunden!";
        return;
    }
    
    // Notentabelle ausgeben
    echo "<table border='1'>";
    echo "<tr><th>Fach</th><th>Noten</th><th>Durchschnitt</th></tr>";
    
    foreach ($schuelerDaten["faecher"] as $fach => $noten) {
        $durchschnitt = berechneDurchschnitt($noten);
        echo "<tr>";
        echo "<td>$fach</td>";
        echo "<td>" . implode(", ", $noten) . "</td>";
        echo "<td>$durchschnitt</td>";
        echo "</tr>";
    }
    
    echo "</table>";
}

/*
 * AUSGABE DER DATEN
 */

// Klassenübersicht anzeigen
klassenUebersicht($schule);

// Schülerliste für Klasse 5a anzeigen
schuelerListe($schule, "5a");

// Notenübersicht für einen bestimmten Schüler anzeigen
notenUebersicht($schule, "5a", "Max Mustermann");
notenUebersicht($schule, "6b", "Julia Fischer");
?>

Ausgabe des Skripts (Beispiel)

Klassenübersicht
----------------
Klasse 5a - Klassenlehrer: Herr Müller
Anzahl Schüler: 3

Klasse 6b - Klassenlehrer: Frau Schneider
Anzahl Schüler: 2


Schülerliste für Klasse 5a
--------------------------
Name: Max Mustermann, Alter: 10
Name: Anna Schmidt, Alter: 11
Name: Tom Weber, Alter: 10


Notenübersicht für Max Mustermann (Klasse 5a)
---------------------------------------------
| Fach    | Noten    | Durchschnitt |
|---------|----------|--------------|
| Mathe   | 4, 3, 2  | 3.0          |
| Deutsch | 2, 3, 2  | 2.33         |
| Sport   | 1, 1, 2  | 1.33         |


Notenübersicht für Julia Fischer (Klasse 6b)
--------------------------------------------
| Fach    | Noten    | Durchschnitt |
|---------|----------|--------------|
| Mathe   | 2, 2, 1  | 1.67         |
| Deutsch | 1, 1, 1  | 1.0          |
| Kunst   | 1, 2, 3  | 2.0          |

Visualisierung der Array-Struktur

SCHULE (Hauptarray)
│
├── "5a" (Klasse)
│   ├── "klassenlehrer" => "Herr Müller"
│   ├── "anzahl_schueler" => 3
│   └── "schueler" (Array aller Schüler)
│       ├── [0] (1. Schüler)
│       │   ├── "name" => "Max Mustermann"
│       │   ├── "alter" => 10
│       │   └── "faecher" (Array der Fächer)
│       │       ├── "Mathe" => [4, 3, 2]
│       │       ├── "Deutsch" => [2, 3, 2]
│       │       └── "Sport" => [1, 1, 2]
│       ├── [1] (2. Schüler)
│       │   ├── "name" => "Anna Schmidt"
│       │   ├── "alter" => 11
│       │   └── "faecher" => [...]
│       └── [2] (3. Schüler)
│           ├── "name" => "Tom Weber"
│           ├── "alter" => 10
│           └── "faecher" => [...]
│
└── "6b" (Klasse)
    ├── "klassenlehrer" => "Frau Schneider"
    ├── "anzahl_schueler" => 2
    └── "schueler" => [...]
        ├── [0] (1. Schüler)
        │   ├── "name" => "Julia Fischer"
        │   ├── "alter" => 12
        │   └── "faecher" => [...]
        └── [1] (2. Schüler)
            ├── "name" => "Paul Meyer"
            ├── "alter" => 11
            └── "faecher" => [...]

Erklärung der Struktur

  1. Ebene 1: Schule – Das Hauptarray enthält alle Klassen der Schule
  2. Ebene 2: Klassen – Jede Klasse ist ein eigenes Array mit Metadaten (Lehrer, Schüleranzahl) und der Schülerliste
  3. Ebene 3: Schüler – Jeder Schüler ist ein Array mit Namen, Alter und seinen Fächern
  4. Ebene 4: Fächer – Jedes Fach enthält ein Array mit den einzelnen Noten
  5. Ebene 5: Noten – Die einzelnen Noten als numerische Werte

Anwendungsfälle dieser Struktur

  1. Schülerverwaltung: Alle Schüler einer Klasse auflisten
  2. Notenberechnung: Durchschnittsnoten für Schüler oder Fächer berechnen
  3. Statistiken: Altersdurchschnitt pro Klasse ermitteln
  4. Berichte: Notenübersichten für Elternabende generieren
  5. Suche: Bestimmte Schüler oder Notenmuster finden

Diese Struktur ist typisch für viele reale Anwendungen, wo hierarchische Daten in PHP verarbeitet werden müssen. Die Verwendung von assoziativen Arrays (mit String-Keys) macht den Code besonders lesbar und wartbar.

Dieses Dokument teilen

Beispiel: Schulverwaltung

Oder Link kopieren

INHALT

Abonnieren

×
Cancel