thephpleague/csv - CSV Dateien unter PHP verarbeiten

Ein weit verbreitetes Dateiformat das bis heute nur inofiziell beschrieben wurde und dennoch weit verbreitet ist, heißt CSV (comma separated values). Ein Grund für die Verbreitung von dem CSV Dateiformat ist die einfache Datenstuktur. Als Spaltentrenner dient ein einfaches Komma oder ein Semikolon. Eine neue Zeile wird durch einen Zeilenumbruch definiert. Damit sind CSV Dateien universal einsetzbar und es gibt, im Gegensatz zu Excel, keine Kompatibilitätsprobleme zwischen verschiedenen Versionen.


Beispiel einer CSV Datei mit Kopfzeile

id;domain;alter
1;netzware.net;9
2;www.netzware.net;9
3;mx.netzware.net;3

In einem Programme wie Google Sheets, Apple Numbers oder Microsoft Excel wird eine CSV Datei als Tabelle dargestellt:

id domain alter
1 netzware.net 9
2 www.netzware.net 9
3 mx.netzware.net 3

CSV Daten mit PHP verarbeiten

Verwendet werden CSV Dateien (meiner Erfahrung nach) hauptsächlich im Bereich von Schnittstellen. Ein guter Grund dafür ist die einfache Dateistruktur und CSV Dateien lassen sich in jeder beliebigen Programmier- und Skriptsprache verarbeiten. In PHP gibt es zur Verarbeitung von CSV Dateien sogar fest eingebaute Funktionen. Zwei Funktionen davon sind fputcsv und str_getcsv. Mit den Funktionen kann man gut arbeiten. Wer sich dagegen etwas Zeit sparen möchte und schnell und einfach einen Datei Im- und Export programmieren möchte, dem empfehle ich die Library von PHPLeague: thephpleague/csv

Eine CSV Werkzeugkiste für PHP Entwickler

Mittels der PHP Library lassen sich schnell und einfach CSV Dateien verarbeiten. So kann eine CSV Datei mit nur ein paar Zeilen Code erstellt, ausgelesen oder in ein anderes Format konvertiert werden. Diese Library erlaubt sogar die Übergabe von Datenbank Abfragen.

Code Beispiele aus der Dokumentation

CSV Datei erstellen

use LeagueCsvWriter;

$header = ['first name', 'last name', 'email'];
$records = [
    [1, 2, 3],
    ['foo', 'bar', 'baz'],
    ['john', 'doe', 'john.doe@example.com'],
];

//load the CSV document from a string
$csv = Writer::createFromString();

//insert the header
$csv->insertOne($header);

//insert all the records
$csv->insertAll($records);

echo $csv->toString();

CSV Datei einlesen

use LeagueCsvReader;
use LeagueCsvStatement;

$reader = Reader::createFromPath('/path/to/my/file.csv', 'r');
$records = Statement::create()->process($reader);

foreach ($records->getRecords() as $record) {
    //do something here
}

CSV Daten als HTML Tabelle ausgeben

use LeagueCsvHTMLConverter;

//we fetch the info from a DB using a PDO object
$sth = $dbh->prepare("SELECT firstname, lastname, email FROM users LIMIT 2");
$sth->setFetchMode(PDO::FETCH_ASSOC);
$sth->execute();

$converter = (new HTMLConverter())
    ->table('table-csv-data', 'users')
    ->tr('data-record-offset')
    ->td('title')
;

// The PDOStatement Object implements the Traversable Interface
// that's why Converter::convert can directly insert
// the data into the HTML Table
$html = $converter->convert($sth);

echo $html;

// <table class="table-csv-data" id="users">
// <tr data-record-offset="0">
// <td title="firstname">john</td>
// <td title="lastname">doe</td>
// <td title="email">john.doe@example.com</td>
// </tr>
// <tr data-record-offset="1">
// <td title="firstname">jane</td>
// <td title="lastname">doe</td>
// <td title="email">jane.doe@example.com</td>
// </tr>
// </table>

Installation via php composer

Installiert werden kann die Library über PHP Composer:

composer require league/csv

Der Quellcode ist auf Github zu finden: github.com/thephpleague/csv

Leave a Reply