Arbeiten mit CSV in PHP: Lesen, Schreiben und Verarbeiten von Daten

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit CSV in PHP: Vollständige Anleitung



CSV (Comma-Separated Values) ist eines der beliebtesten Formate für den Austausch von Tabellendaten. PHP bietet sowohl integrierte Funktionen für die Arbeit mit CSV als auch leistungsstarke Drittanbieter-Bibliotheken. In diesem Artikel behandeln wir alle grundlegenden Methoden zum Lesen, Schreiben und Verarbeiten von CSV-Dateien in PHP.



Integrierte PHP-Funktionen für die Arbeit mit CSV



PHP stellt mehrere integrierte Funktionen bereit, die die Arbeit mit CSV-Dateien ohne Installation zusätzlicher Bibliotheken ermöglichen. Die wichtigsten sind:



  • fgetcsv() — Liest eine Zeile aus einer Datei und parst sie in ein Array
  • fputcsv() — Schreibt ein Array im CSV-Format in eine Datei
  • str_getcsv() — Parst einen CSV-String in ein Array


Lesen einer CSV-Datei mit fgetcsv



Die Funktion fgetcsv() liest eine einzelne Zeile aus einer geöffneten Datei und gibt sie als Array zurück. Beispiel für das Lesen einer gesamten Datei:



<?php$filename = 'data.csv';

if (($handle = fopen($filename, 'r')) !== false) { while (($data = fgetcsv($handle, 1000, ',')) !== false) { // $data ist ein Array mit den Daten der Zeile echo implode(' | ', $data) . ""; } fclose($handle);}?>


Parameter der Funktion fgetcsv():

  • handle — Datei-Handle
  • length — Maximale Zeilenlänge (normalerweise 0 oder 1000)
  • separator — Feldtrennzeichen (Standard: Komma)
  • enclosure — Zeichen für die Feldumrahmung (Standard: doppeltes Anführungszeichen)
  • escape — Escape-Zeichen (Standard: Backslash)


Daten in eine CSV-Datei schreiben



Zum Schreiben wird die Funktion fputcsv() verwendet. Sie nimmt ein Array entgegen und wandelt es in einen CSV-String um:



<?php$data = [    ['Name', 'Alter', 'Stadt'],    ['Ivan', 25, 'Moskau'],    ['Maria', 30, 'Sankt Petersburg'],];

$filename = 'output.csv';$handle = fopen($filename, 'w');

foreach ($data as $row) { fputcsv($handle, $row, ';', '"');}

fclose($handle);echo "Datei $filename erfolgreich erstellt!";?>


In diesem Beispiel verwenden wir das Semikolon (;) als Trennzeichen, was in russischsprachigen CSV-Dateien häufig vorkommt.



Verarbeitung großer CSV-Dateien



Bei der Arbeit mit großen Dateien (Hunderttausende von Zeilen) ist es wichtig, nicht die gesamte Datei in den Speicher zu laden. Verwenden Sie zeilenweises Lesen:



<?phpfunction processLargeCSV($filename) {    $handle = fopen($filename, 'r');        // Überspringen der Kopfzeile, falls vorhanden    $header = fgetcsv($handle);        while (($row = fgetcsv($handle)) !== false) {        // Jede Zeile verarbeiten        $processed = array_map('trim', $row);        // Hier kann Ihre Verarbeitungslogik stehen        yield $processed; // Generator verwenden    }        fclose($handle);}

// Verwendungforeach (processLargeCSV('bigdata.csv') as $row) { // Mit jeder Zeile einzeln arbeiten echo "Zeile verarbeitet: " . implode(',', $row) . "";}?>


Die Verwendung von Generatoren (yield) ermöglicht die Verarbeitung von Dateien beliebiger Größe ohne Speicherüberlauf.



Bibliothek League\\Csv für fortgeschrittene Arbeit



Für komplexere Aufgaben wird die Verwendung der Bibliothek league/csv empfohlen. Sie bietet eine benutzerfreundliche objektorientierte Schnittstelle und zahlreiche zusätzliche Funktionen.



Installation über Composer:

composer require league/csv


Anwendungsbeispiel:



<?phprequire 'vendor/autoload.php';

use League\\Csv\\Reader;use League\\Csv\\Writer;

// CSV lesen$csv = Reader::createFromPath('data.csv', 'r');$csv->setHeaderOffset(0); // Erste Zeile ist die Kopfzeile

// Alle Datensätze als asso

Empfehlungen