Große Datenmengen in PHP: Speicher sparen mit Generatoren
Statt erst ein riesiges Array aufzubauen, kannst du Werte mit yield einzeln erzeugen und direkt weiterverarbeiten.
function userIds(PDO $db): Generator {
$stmt = $db->query('SELECT id FROM users');
while (($id = $stmt->fetchColumn()) !== false) {
yield (int) $id;
}
}
foreach (userIds($db) as $id) {
processUser($id);
}
Ohne Generatoren landet oft alles zuerst in einem Array, etwa per fetchAll() oder durch manuelles Sammeln. Das kostet bei vielen Datensätzen schnell unnötig viel RAM.
Vorteile: Weniger Speicherverbrauch, schnellerer Start der Verarbeitung, sauberere Trennung zwischen Datenquelle und Verarbeitung.
Wichtig: Generatoren sind ideal für sequentielle Verarbeitung. Wenn du alle Werte mehrfach brauchst oder zufällig darauf zugreifen willst, ist ein echtes Array oft immer noch die richtige Wahl.