1unitedpower: Brauche Idee, für Titel Ausgabe bei einer SELECT abfrage, Ausgabe, gruppierte Var, dann Titel

Beitrag lesen

Iteratoren und Generatoren verwende ich sehr gerne in C#, aber in PHP tue ich mich teils mit der Syntax schwer. Wenn ich das richtig verstanden habe, ist deine groupBy Funktion ein Generator, der Generatoren pro Kategorie erzeugt und zurückgibt. In der Anwendung nimmt die äußere Schleife diese Generatoren entgehen (als $category) und arbeitet sie in der inneren Schleife ab.

Korrekt soweit.

Aber woher weiß die Anwendung an der Stelle, wo dein Kommentar steht, was in den Kategoriekopf gehört?

Gute Frage. In meinem Beispiel ist eine Kategorie nichts weiter als eine Sammlung von Zeilen. Kopfdaten, wie Titel oder den Kateogrie-Schlüssel, habe ich vernachlässigt, da habe ich wohl zu sehr gekürzt. Hier mal für den Kategorie-Schlüssel nachgeholt:

function groupBy(Traversable $rows, string $col) : Iterator {
   $it = new IteratorIterator($rows);
   while ($it->valid()) {
       $key = $it->current()[$col];
       yield [$key, slice($it, $col)];
   }
}

Eine Kategorie ist jetzt also ein Paar bestehend aus einem Schlüssel und einer Sammlung von Zeilen. Schöner wäre natürlich an dieser Stelle eine Kategorie-Klasse.

foreach ($categories as list($key, $category)) {
    // Kategorie-Kopf ausgeben
    foreach ($category as $entry) {
        // Zeile ausgeben
    }
}