Hallo Matheu,
du kannst das so machen, wie Tobias das aufgeschrieben hat.
Aber tatsächlich ist dein Problem ein Musterproblem der strukturierten Programmierung: wie passt man die Programmstruktur an die Datenstruktur an. In den 70 Jahren, als man dieses Thema standardisierte, hat man Dateien gelesen. Heute liest man SQL Query-Ergebnisse. Aber im Prinzip ist es das Gleiche.
Deine Eingabe:
Queryergebnis
Row*
Lies: Ein Queryergebnis, das Queryergebnis ist eine Iteration von Rows
Deine Ausgabe:
HTML-Segment
Kategoriengruppe*
Überschrift
Inhalt
Detailsatz*
Lies: Deine Ausgabe ist ein Stück HTML, das aus Kategoriegruppen besteht. Eine Gruppe ist eine Abfolge von Überschrift und Inhalt. Der Inhalt ist eine Iteration von Detailsätzen.
Aufgabe der strukturierten Programmierung ist, eine Programmstruktur zu finden, die gleichzeitig zu Eingabe- und Ausgabestruktur passt.
Der Trick besteht in den meisten Fällen darin, einmal vorauszulesen. Damit wirft man einen kleinen Blick in die Zukunft und weiß, wie man die Logik steuern muss.
Pseudocode: (Editiert: innere WHILE-Bedingung war falsch)
Query ausführen
Fetch auf erste Row
WHILE (row vorhanden)
$cat = $row['cat'];
Kategorieüberschrift schreiben
WHILE (row vorhanden UND row['cat'] == $cat)
Detailzeile schreiben
Fetch auf nächste Row
END
END
So machte man das vor 50 Jahren. Und so funktioniert das auch heute noch :)
Literatur: Michael Jackson (sic!), Principles of Program Design
en. Wikipedia über jackson-structured programming
dt. Wikipedia über Jackson-Diagramme
Das klingt heute in der Zeit von objektorientierter und funktionaler Programmierung alles so obsolet. Als ich in den 80er Jahren Programmieren lernte, habe ich als BASIC Autodidakt angefangen, und dann in der Ausbildung JSP lernen müssen und fühlte mich zuerst vera...lbert. Aber für spezifische Aufgaben, wie genau dieser hier, ist Kenntnis dieser Techniken relevant und zeitlos.
Rolf
--
sumpsi - posui - obstruxi