CSV-Dateien ganz einfach mit PHP erstellen und lesen!
Kategorie:
Veröffentlicht: 10.12.2019
Dein Netzwerk ist offline, deshalb laden wir die gesamte Seite aus dem Cache. Beachte: die Inhalte könnten veraltet sein! Für aktuelle Inhalte aktiviere bitte dein Internet.
Hallo liebe Nutzer,
da wir als Coding-Plattform und Webentwickler ausschließlich auf aktuelle Technologien setzen, unterstützen wir keine veralteten Internetbrowser. Bitte schau dir doch ein paar der tollen Alternativen an, bestimmt findest du hier einen für dich passenden modernen Browser!

Benachrichtigungen

Bleib immer mit aktuellen Informationen auf dem Laufenden, dein Browser informiert dich über neue Artikel und wichtige Hinweise von uns!

Mit CSV-Dateien arbeiten in PHP! Lesen & schreiben!

Inhaltsverzeichnis
[[TABLE OF CONTENTS]]

In diesem Artikel beschäftigen wir uns damit, wie wir in PHP mit CSV-Dateien arbeiten können. Sowohl das Lesen als auch das Schreiben haben in PHP eigene Funktionen für CSV-Dateien.

Ich habe euch zwei Beispiele mitgebracht: Einmal für das Lesen einer CSV-Datei als Array mit Feldbezeichnung. Und des Weiteren für das Schreiben mit Kopfzeile.

Was sind CSV-Dateien überhaupt?

CSV steht für comma-separated values oder auch für character-separated values. Letzteres finde ich persönlich passender, da auch andere Separatoren verwendet werden.

Eine CSV-Datei repräsentiert immer eine Tabelle, aus diesem Grund haben CSV-Datein auch immer eine Kopfzeile mit der Bezeichnung der Spalte. Ein häufiger Verwendungszweck für CSV-Dateien ist der Export und Import von Daten in Tabellenkalkulationsanwendungen. Ein bekanntes Beispiel hierfür ist Excel. Ein anderer Anwendungsbereich ist zum Beispiel der Produktexport oder -import bei Woocommerce-Shop-Produkten. Dort repräsentiert dann eine Zeile ein Produkt.

Eine CSV-Datei, die mittels PHP erstellt wurde, kann zum Beispiel den folgenden Inhalt haben:

Produkt,"Im Lager",Preis,Produkt-ID
Tastatur,1,"5,50",90-120
Lampe,,"6,70",91-120
Tastatur,1,"5,50",90-120
Lampe,,"6,70",91-120

Was hier auffällt: Sobald sich ein Komma oder eine Leerstelle in einem Feld befindet, wird der Wert in Anführungszeichen gesetzt. Bei Feldern, die zum Beispiel "False" sind, wird gar nichts eingetragen!

Hier noch einmal eine Infografik, die zeigt wie es aussieht, wenn eine Tabelle durch eine CSV-Datei repräsentiert wird.

Schreiben von CSV-Dateien in PHP

Als erstes habe ich euch ein Beispiel für das Schreiben von CSV-Dateien mitgebracht. In dem Beispiel wurde als erstes geprüft, ob die Datei existiert oder eben nicht.

Mit der Funktion file_exists() kannst du prüfen, ob die Datei im Verzeichnis existiert. Du kannst auch noch einen Pfad angeben, wenn du in einem Unterverzeichnis nach der Datei schauen willst.

Wenn sie bereits existiert, öffnen wir die Datei im "a" Mode. Das steht für "Append". Also können wir neue Spalten zu einer bestehenden CSV-Datei ergänzen. Eine Alternative wäre, als erstes eine erste Zeile definieren zu lassen, falls die Datei noch nicht existieren sollte. Diese Spalte enthält die Bezeichnungen für die einzelnen Spalten als Array. Zu beachten ist, dass ein Array ohne Mehrdimensionalität immer einer Zeile entspricht.

Durch die Funktion fputcsv(DateiStream,Zeile) wird eine neue Zeile in die Datei geschrieben. $csvFile ist unser geöffneter Stream zur Datei, die wir mit der Zeile $head beschreiben, wenn es eine neue Datei ist.

Darunter definieren wir unseren Array $data. Dieser enthält zwei Zeilen; einmal für das Produkt "Tastatur" und einmal für die "Lampe".

Durch eine Schleife schreiben wir nun alle Zeilen mittels PHP in die CSV-Datei.


<?php

$fileName = 'produkte.csv';

if(file_exists($fileName)):
    $csvFile = fopen($fileName,'a');
else:
    $csvFile = fopen($fileName,'w');
    $head = ["Produkt","Im Lager","Preis","Produkt-ID"];
    fputcsv($csvFile,$head);
endif;

$data = [
    ["Tastatur",true,"5,50","90-120"],
    ["Lampe",false,"6,70","91-120"]
];

foreach($data as $row){
    fputcsv($csvFile,$row);
}

fclose($csvFile);

?>

Am Ende ist es wichtig, mittels fclose die CSV-Datei wieder zu schließen. Ansonsten kann es zu Fehlern kommen, sobald zu viele Dateien gleichzeitig geöffnet sind.

Zu beachten ist außerdem, dass die Felde immer der Anzahl der Felder in der ersten Spalte entsprechen sollten, da es sonst bei einem späteren Lesen der CSV-Datei gegebenenfalls zu Komplikationen kommen kann.

Als erste Spalte die Bezeichnungen, für die Spalten danach folgen die Inhalte der Produkte.

Unsere CSV-Datei aus dem obigen Code wird den folgenden Inhalt haben:

Produkt,"Im Lager",Preis,Produkt-ID
Tastatur,1,"5,50",90-120
Lampe,,"6,70",91-120

Lesen von CSV-Dateien in PHP

Natürlich kannst du mit PHP nicht nur CSV-Dateien schreiben, sondern auch lesen. Das möchte ich hier einmal beschreiben. In dem Beispiel gehe ich davon aus, dass eine Kopfzeile mit Bezeichnungen existiert und dass die einzelnen Zeilen nicht mehr Felder haben als die Kopfzeile.

In dem Beispiel erstellen wir aus der Tabelle ein mehrdimensionales Array. Eine Zeile ist ein Array im Array. Das folgende Beispiel zeigt das etwas besser.

array(2) {
    [0]=>
        array(4) {
            ["Produkt"]=>
            string(8) "Tastatur"
            ["Im Lager"]=>
            string(1) "1"
            ["Preis"]=>
            string(4) "5,50"
            ["Produkt-ID"]=>
            string(6) "90-120"
        }
    [1]=>
        array(4) {
            ["Produkt"]=>
            string(5) "Lampe"
            ["Im Lager"]=>
            string(0) ""
            ["Preis"]=>
            string(4) "6,70"
            ["Produkt-ID"]=>
            string(6) "91-120"
        }
}

Wir Ordnen jedem Key immer einen Value zu. So können wir von jeder Zeile direkt auf den Preis oder die Produkt-ID zugreifen. So haben wir es einfacher, auf die Elemente zuzugreifen. Wenn wir wissen, dass die Produkt-ID eindeutig ist, können wir auch statt 0 und 1 jeweils die Produkt-ID als Key nehmen. So kann man noch schneller auf bestimmte Produkte zugreifen.

Natürlich kannst du dir auch einfach ein Array mit Zahlen als Key schreiben, je nach dem, wie du es für deine Anwendung verwenden willst.

<?php

$fileName = 'produkte.csv';
$keys = [];
$tableArray = [];

if(file_exists($fileName)){
    if(($csvFile = fopen($fileName,"r")) !== false){
        $i = 0;

        while(($row = fgetcsv($csvFile, 0,",")) !== false){
            if($i === 0){
                foreach($row as $item){
                    $keys[] = $item;
                }
            }else{
                $rowClean = [];
                for ($i=0; $i < count($row); $i++) { 
                    $rowClean[$keys[$i]] = trim($row[$i]);
                }
                $tableArray[] = $rowClean;
            }
            $i++;
        }
        fclose($csvFile);
    }
}

var_dump($tableArray);

?>

Wie gehen wir vor?

Als erstes prüfen wir, ob die Datei existiert. Danach prüfen wir, ob wir die Datei öffnen können; in diesem Fall öffnen wir sie im "r"-Modus. Dadurch können wir nur lesen, aber nicht schreiben.

Anschließend öffnen wir mittels fgetcsv die CSV selbst und greifen nun in einer While-Schleife auf die einzelnen Rows zu. Als ersten Parameter erwartet die Funktion einen Datenstream zur CSV-Datei, danach folgt die Länge einer Zeile. Setzen wir diesen auf 0, ist die theoretische Zeilenlänge unendlich. Als letzten Parameter können wir noch den Seperator definieren, falls wir nicht mit dem Default Komma "," gearbeitet haben.

Jetzt, da wir wissen, dass unsere erste Spalte die Kopfzeile ist, sammeln wir uns erst einmal die Spaltenbezeichnungen ein. Danach ordnen wir die einzelnen Werte dem Spaltennamen zu. Die gruppierten Spalten werden im tableArray geschrieben, sodass wir danach auf die Werte zugreifen können.

Wichtig ist, dass wir mittels fgetcsv auf die Werte zugreifen. Wie genau du die Auswertung der Zeilen vornehmen willst, ist dir überlassen, für saubere CSV-Dateien mit einer Kopfspalte wird diese Variante problemlos funktionieren.

Home Menü Suche
X