Hallo zusammen,
da ich mich heute hier aus dem Fenster gelehnt habe, benötige ich Eure Meinung zum neuen Wiki-Artikel Gruppenwechsel.
Der Artikel an sich stellt kein großes Problem dar, vielmehr (wie in den meisten Fällen) das Erstellen von einfachen Beispielen.
Ich habe mir folgendes überlegt:
Für Gruppenwechsel 1., 2. und 3. Ordnung (spätestens dann sollte das Prinzip klar sein) werden Schulen "Gruppenwechseltechnisch" (was für ein Wort... ;)) bearbeitet.
- 1. Ordnung: Schüler einer Schule
- 2. Ordnung: Schüler eines Jahrgangs einer Schule
- 3. Ordnung: Schüler einer Klasse eines Jahrgangs einer Schule
Meine Idee ist, dass alle drei Fälle "einheitlich" behandelt werden und, natürlich, leicht verständlich sind. Der Vollständigkeit halber: Als letztes Beispiel (n. Ordnung) soll ein Stammbaum (Vater-Sohn-Beziehung) erklärt werden und warum dies bei einer begrenzten Anzahl von Stufen mittels Gruppenwechsel zwar möglich, aber "nicht besonders klug" ist.
Nun mein Problem: Sowas wie ein Gruppenwechsel kommt ja immer mal wieder vor, allerdings habe ich mir darüber noch nie Gedanken gemacht (sondern es "einfach gemacht") und finde daher kein schönes Beispiel.
Deshalb meine Fragen:
- Findet ihr das Schulbeispiel passt? Gibt's bessere Ideen?
- Untenstehend ein paar Beispiele für mögliche Beispiele 1. Ordnung. Welches ist am verständlichsten? Welches ist nicht so gut? Habt ihr andere Vorschläge? Mein Problem ist einfach, wie kann ich das einigermaßen einheitlich über die drei Ordnungen hinkriegen und auch so, dass es ein Laie versteht!? Es gibt einfach viel zu viele Möglichkeiten...
Das Daten-Array (für Ordnung 2 käme dann ein Eintrag "Jahrgang" je Schüler hinzu. Für Ordnung 3 ein Eintrag "Klasse" je Schüler):
$schueler = array();
$schueler[] = array('schule' => 'Geschwister-Scholl-Schule', 'name' => 'Emma');
$schueler[] = array('schule' => 'Geschwister-Scholl-Schule', 'name' => 'Ben');
$schueler[] = array('schule' => 'Albert-Schweitzer-Schule', 'name' => 'Finn');
$schueler[] = array('schule' => 'Albert-Schweitzer-Schule', 'name' => 'Lena');
$schueler[] = array('schule' => 'Geschwister-Scholl-Schule', 'name' => 'Mia');
$schueler[] = array('schule' => 'Geschwister-Scholl-Schule', 'name' => 'Hannah');
$schueler[] = array('schule' => 'Albert-Schweitzer-Schule', 'name' => 'Noah');
$schueler[] = array('schule' => 'Geschwister-Scholl-Schule', 'name' => 'Luis');
$schueler[] = array('schule' => 'Geschwister-Scholl-Schule', 'name' => 'Paul');
$schueler[] = array('schule' => 'Geschwister-Scholl-Schule', 'name' => 'Sofia');
$schueler[] = array('schule' => 'Geschwister-Scholl-Schule', 'name' => 'Lukas');
$schueler[] = array('schule' => 'Albert-Schweitzer-Schule', 'name' => 'Lea');
$schueler[] = array('schule' => 'Albert-Schweitzer-Schule', 'name' => 'Emily');
$schueler[] = array('schule' => 'Albert-Schweitzer-Schule', 'name' => 'Elias');
$schueler[] = array('schule' => 'Geschwister-Scholl-Schule', 'name' => 'Emilia');
$schueler[] = array('schule' => 'Albert-Schweitzer-Schule', 'name' => 'Luca');
$schueler[] = array('schule' => 'Geschwister-Scholl-Schule', 'name' => 'Jonas');
$schueler[] = array('schule' => 'Geschwister-Scholl-Schule', 'name' => 'Anna');
$schueler[] = array('schule' => 'Albert-Schweitzer-Schule', 'name' => 'Marie');
$schueler[] = array('schule' => 'Geschwister-Scholl-Schule', 'name' => 'Leon');
array_multisort($schueler);
Die Schul- und Schülernamen übrigens ganz unverfänglich hier und hier her.
- Vorschlag 1: Vollständiges Beispiel
- Vorteil: Aufteilung Gruppenvor-, -durch-, und -nachlauf sind klar ersichtlich; nahezu genau "die Theorie"
- Nachteil: Die Vor- und Zurückzählung der Zählervariablen; schlecht auf die anderen Ordnungen erweiterbar (dann sehr unübersichtlich)
for ($i = 0; $i < count($schueler); $i++) {
$schule = $schueler[$i]['schule'];
$namenDerSchueler = array();
$namenDerSchueler[] = $schueler[$i]['name'];
$anzahlDerSchueler = 1;
for ($j = $i + 1; $j < count($schueler); $j++) {
if ($schule != $schueler[$j]['schule']) {
break;
}
$namenDerSchueler[] = $schueler[$j]['name'];
$anzahlDerSchueler++;
}
printf('Schule: %s<br>', $schule);
printf('-- Anzahl Schüler: %s<br>', $anzahlDerSchueler);
printf('-- Schüler: %s<br>', implode(', ', $namenDerSchueler));
$i = $j - 1;
}
- Vorschlag 2
- Vorteil: Nur eine Schleife
- Nachteil: Aufteilung Gruppenvor-, -durch-, und -nachlauf nicht klar ersichtlich; einiges doppelt; einfach erweiterbar
$schule = $schueler[0]['schule'];
$namenDerSchueler = array();
$namenDerSchueler[] = $schueler[0]['name'];
$anzahlDerSchueler = 1;
for ($i = 1; $i < count($schueler); $i++) {
if ($schule != $schueler[$i]['schule']) {
printf('Schule: %s<br>', $schule);
printf('-- Anzahl Schüler: %s<br>', $anzahlDerSchueler);
printf('-- Schüler: %s<br>', implode(', ', $namenDerSchueler));
$schule = $schueler[$i]['schule'];
$namenDerSchueler = array();
$anzahlDerSchueler = 0;
}
$namenDerSchueler[] = $schueler[$i]['name'];
$anzahlDerSchueler++;
}
printf('Schule: %s<br>', $schule);
printf('-- Anzahl Schüler: %s<br>', $anzahlDerSchueler);
printf('-- Schüler: %s<br>', implode(', ', $namenDerSchueler));
- Vorschlag 3
- Vorteil: Ohne Probleme erweiterbar
- Nachteil: Eine Schleife nur für die Ausgabe; sehr schlecht lesbar; nicht allgemeingültig (nicht in allen Programmiersprachen möglich)
$schulenSortiert = array();
for ($i = 0; $i < count($schueler); $i++) {
if (!array_key_exists($schueler[$i]['schule'], $schulenSortiert)) {
$schulenSortiert[$schueler[$i]['schule']] = array();
$schulenSortiert[$schueler[$i]['schule']]['schueler'] = array();
$schulenSortiert[$schueler[$i]['schule']]['anzahl'] = 0;
}
$schulenSortiert[$schueler[$i]['schule']]['schueler'][] = $schueler[$i]['name'];
$schulenSortiert[$schueler[$i]['schule']]['anzahl']++;
}
foreach ($schulenSortiert as $name => $eigenschaft) {
printf('Schule: %s<br>', $name);
printf('-- Anzahl Schüler: %s<br>', $eigenschaft['anzahl']);
printf('-- Schüler: %s<br>', implode(', ', $eigenschaft['schueler']));
}
Ich würde mich wie gesagt über jegliche Anregungen, Meinungen, Kritiken und Vorschläge freuen.
Gruß Dennis