Arbeiten mit CSV in PHP: Lesen, Schreiben und Datenverarbeitung
Das CSV-Format (Comma-Separated Values) bleibt eines der beliebtesten Verfahren zum Austausch von Tabellendaten. PHP bietet integrierte Funktionen für die Arbeit mit diesem Format, was es zur idealen Wahl für den Datenimport/-export, die Integration mit CRM, Buchhaltungssystemen und die Berichterstellung macht. In diesem Artikel behandeln wir den gesamten Arbeitszyklus mit CSV: vom Öffnen einer Datei bis zur Verarbeitung komplexer Fälle mit Maskierung und Kodierungen.
Wichtige PHP-Funktionen für die Arbeit mit CSV
PHP verfügt über zwei Schlüsselfunktionen: fgetcsv() zum Lesen und fputcsv() zum Schreiben. Sie verarbeiten automatisch Trennzeichen, Anführungszeichen und Maskierungen.
CSV-Datei zeilenweise lesen
Ein einfaches Beispiel zum Lesen einer CSV-Datei mit fgetcsv():
<?php$filename = 'data.csv';
if (($handle = fopen($filename, 'r')) !== false) { // Kopfzeilen lesen (erste Zeile) $headers = fgetcsv($handle, 1000, ','); if ($headers !== false) { echo "Kopfzeilen: " . implode(', ', $headers) . "<br>"; // Daten zeilenweise lesen while (($row = fgetcsv($handle, 1000, ',')) !== false) { echo "Zeile: " . implode(' | ', $row) . "<br>"; } } fclose($handle);}?>Parameter von fgetcsv():
handle— Datei-Handle (Ergebnis von fopen)length— maximale Zeilenlänge (empfohlen 0 für automatische Erkennung)separator— Feldtrennzeichen (Standard: Komma)enclosure— Anführungszeichen (Standard: doppelte Anführungszeichen)escape— Escape-Zeichen (Standard: Backslash)
Daten in CSV schreiben
Die Funktion fputcsv() formatiert eine Zeile automatisch mit korrekter Maskierung:
<?php$data = [ ['ID', 'Name', 'Email', 'Registrierungsdatum'], [1, 'Ivan Petrov', 'ivan@example.com', '2024-01-15'], [2, 'Maria Sidorova', 'maria@example.com', '2024-02-20'], [3, 'Alexej "Professor" Ivanov', 'alex@example.com', '2024-03-10']];
$filename = 'users.csv';
if (($handle = fopen($filename, 'w')) !== false) { // BOM für korrekte Darstellung von Kyrillisch in Excel schreiben fwrite($handle, "\\xEF\\xBB\\xBF"); foreach ($data as $row) { fputcsv($handle, $row, ';'); // Semikolon für Excel verwenden } fclose($handle); echo "Datei $filename erfolgreich erstellt!";}?>Verarbeitung großer CSV-Dateien
Bei der Arbeit mit großen Dateien (Hunderttausende von Zeilen) ist es wichtig, die gesamte Datei nicht in den Speicher zu laden. Verwenden Sie die Stream-Verarbeitung:
<?phpfunction processLargeCSV($filename, callable $callback) { $handle = fopen($filename, 'r'); if ($handle === false) { throw new Exception("Konnte Datei nicht öffnen: $filename"); } $headers = fgetcsv($handle, 0, ','); if ($headers === false) { fclose($handle); throw new Exception("Leere Datei oder Fehler beim Lesen der Kopfzeilen"); } $rowNumber = 1; while (($row = fgetcsv($handle, 0, ',')) !== false) { if (count($row) !== count($headers)) { // Zeilen mit falscher Feldanzahl überspringen continue; } // Kopfzeilen mit Daten kombinieren $assocRow = array_combine($headers, $row); call_user_func($callback, $assocRow, $rowNumber); $rowNumber++; } fclose($handle);}
// Verwendung:processLargeCSV('bigdata.csv', function($row, $number) { echo "Zeile #$number: {$row['email']} - {$row['name']}<br>";});?>Arbeiten mit verschiedenen Trennzeichen und Kodierungen
Oft werden CSV-Da
Auch in der Bibliothek
Datenvalidierung in Rust: Überblick über Bibliotheken und Frameworks
TypeBox für TypeScript: Komplettguide mit Praxisbeispielen
Maschinelles Lernen mit C#: Bibliotheken ML.NET und Accord.NET
HTML-Parsing in TypeScript: Bibliotheken, Werkzeuge und Beispiele
Mapster C# (.NET): Komplettguide mit Beispielen