Konvertieren Sie eine CSV-Datei in ein Array in PHP

Olorunfemi Akinlua 20 Juni 2023
  1. Verwenden Sie fopen() und fgetcsv(), um CSV in Array in PHP zu konvertieren
  2. Verwenden Sie str_getcsv(), um CSV in Array in PHP zu konvertieren
  3. Verwenden Sie array_map(), um CSV in Array in PHP zu konvertieren
Konvertieren Sie eine CSV-Datei in ein Array in PHP

Comma Separated Values (CSV)-Dateien sind ein großer Teil der Datenpipeline. Unabhängig von der Programmiersprache hat Ihre Anwendung einen Platz für CSV.

CSV-Dateien sind beliebt zum Speichern von Daten im Zeilen- und Spaltenformat. Daher sind Arrays die perfekte Datenstruktur, um ihre Werte zu speichern, wenn wir CSV-Dateien in unserer PHP-Anwendung verarbeiten.

In diesem Artikel werden wir Ihnen die integrierten PHP-Funktionen beschreiben und zeigen, mit denen wir CSV lesen und in ein Array in PHP konvertieren können.

Verwenden Sie fopen() und fgetcsv(), um CSV in Array in PHP zu konvertieren

Für diesen Abschnitt und die beiden anderen Abschnitte verwenden wir eine CSV-Datei, die staatliche Wohnungswerte (state_housing_values.csv) mit 51 Zeilen und 4 Spalten enthält, um zu zeigen, wie diese Funktionen funktionieren.

Zuerst brauchen wir die Funktion fopen(), um die CSV-Datei zu öffnen und sie auf die Funktion fgetcsv() als erstes Argument zu verweisen, wobei die restlichen Argumente optional sind. Die anderen Parameter sind Länge, Trennzeichen, Gehäuse und escape.

Konvertieren wir nun die CSV-Datei in ein Array.

$file = fopen('state_housing_values.csv', 'r');
while (($line = fgetcsv($file)) !== FALSE) {
    var_dump($line);
}
fclose($file);

Ausgang:

array(4) {
  [0]=>
  string(5) "State"
  [1]=>
  string(5) "Price"
  [2]=>
  string(13) "1-year change"
  [3]=>
  string(15) "1-year forecast"
}
array(4) {
  [0]=>
  string(7) "Alabama"
  [1]=>
  string(7) "143,072"
  [2]=>
  string(3) "5.5"
  [3]=>
  string(4) "-1.1"
}
array(4) {
  [0]=>
  string(6) "Alaska"
  [1]=>
  string(7) "300,073"
  [2]=>
  string(4) "-2.3"
  [3]=>
  string(4) "-4.8"
}
array(4) {
  [0]=>
  string(7) "Arizona"
  [1]=>
  string(7) "277,574"
  [2]=>
  string(3) "7.5"
  [3]=>
  string(4) "-0.5"
}
array(4) {
  [0]=>
  string(8) "Arkansas"
  [1]=>
  string(7) "130,907"
  [2]=>
  string(3) "3.8"
  [3]=>
  string(4) "-1.7"
}
array(4) {
  [0]=>
  string(10) "California"
  [1]=>
  string(7) "578,267"
  [2]=>
  string(3) "4.4"
  [3]=>
  string(4) "-1.1"
}
...

Bevor wir fortfahren, können wir den Header entfernen, der in unserer PHP-Codebasis möglicherweise nicht benötigt wird. Dazu können wir einfach $line = fgetcsv($file) vor der while-Schleife hinzufügen.

$file = fopen('state_housing_values.csv', 'r');
$line = fgetcsv($file);
while (($line = fgetcsv($file)) !== FALSE) {
    var_dump($line);
}
fclose($file);

Ausgang:

array(4) {
  [0]=>
  string(7) "Alabama"
  [1]=>
  string(7) "143,072"
  [2]=>
  string(3) "5.5"
  [3]=>
  string(4) "-1.1"
}
array(4) {
  [0]=>
  string(6) "Alaska"
  [1]=>
  string(7) "300,073"
  [2]=>
  string(4) "-2.3"
  [3]=>
  string(4) "-4.8"
}
...

Damit ist der Header nicht mehr im Array,

Das obige Array-Format ist sehr schwer zu handhaben. Um das Array praktikabler zu machen, müssen wir den Code umgestalten und array_combine() verwenden.

<?php

$filename = 'state_housing_values.csv';
$delimiter = ',';

if (file_exists($filename) || is_readable($filename)) {
    $header = NULL;
    $data = array();
    if (($handle = fopen($filename, 'r')) !== FALSE) {
        while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
            if (!$header)
                $header = $row;
            else
                $data[] = array_combine($header, $row);
        }
        fclose($handle);
    }
    var_dump($data);
} else {
    error_log("Error reading file.");
}
?>

Ausgang:

array(50) {
  [0]=>
  array(4) {
    ["State"]=>
    string(7) "Alabama"
    ["Price"]=>
    string(7) "143,072"
    ["1-year change"]=>
    string(3) "5.5"
    ["1-year forecast"]=>
    string(4) "-1.1"
  }
  [1]=>
  array(4) {
    ["State"]=>
    string(6) "Alaska"
    ["Price"]=>
    string(7) "300,073"
    ["1-year change"]=>
    string(4) "-2.3"
    ["1-year forecast"]=>
    string(4) "-4.8"
  }
...

Es gibt Fälle, in denen das Trennzeichen kein Komma , ist. Daher müssen wir das Trennzeichen angeben.

Andere Trennzeichen könnten ein Semikolon ;, ein Leerzeichen " " oder ein Tabulator \t sein. Um das Trennzeichen innerhalb der Funktion anzugeben, können Sie dem folgenden Code folgen.

$delimiter = ';'; // semi-colon
fgetcsv($handle, 1000, $delimiter)

Verwenden Sie str_getcsv(), um CSV in Array in PHP zu konvertieren

Hier verwenden wir die Funktion file(), um die CSV-Datei zu verarbeiten, durchlaufen den Dateizeiger mit der Schleife foreach und platzieren jeden Wert innerhalb des Arrays $data über die str_getcsv() Funktion.

$data = array();
$lines = file('state_housing_values.csv', FILE_IGNORE_NEW_LINES);

foreach ($lines as $key => $value) {
    $data[$key] = str_getcsv($value);
}

print_r($data);

Ausgang:

Array
(
    [0] => Array
        (
            [0] => State
            [1] => Price
            [2] => 1-year change
            [3] => 1-year forecast
        )

    [1] => Array
        (
            [0] => Alabama
            [1] => 143,072
            [2] => 5.5
            [3] => -1.1
        )

    [2] => Array
        (
            [0] => Alaska
            [1] => 300,073
            [2] => -2.3
            [3] => -4.8
        )

    [3] => Array
        (
            [0] => Arizona
            [1] => 277,574
            [2] => 7.5
            [3] => -0.5
        )

    [4] => Array
        (
            [0] => Arkansas
            [1] => 130,907
            [2] => 3.8
            [3] => -1.7
        )

    [5] => Array
        (
            [0] => California
            [1] => 578,267
            [2] => 4.4
            [3] => -1.1
        )

    [6] => Array
        (
            [0] => Colorado
            [1] => 408,794
            [2] => 3.1
            [3] => -1.7
        )

    [7] => Array
        (
            [0] => Connecticut
            [1] => 259,855
            [2] => 1.4
            [3] => -2.3
        )

    [8] => Array
        (
            [0] => Delaware
            [1] => 257,521
            [2] => 0
            [3] => -2.9
        )

    [9] => Array
        (
            [0] => Florida
            [1] => 252,309
            [2] => 3.6
            [3] => -1.5
        )

    [10] => Array
        (
            [0] => Georgia
            [1] => 206,804
            [2] => 4.9
            [3] => -1.5
        )
...

Fügen Sie dem obigen Code einige Änderungen hinzu, um den Header zu entfernen. Wir werden die bedingte Anweisung if verwenden, um das erste Array zu entfernen, das den Header enthält.

foreach ($lines as $key => $value) {
    if (!$key == 0) {
        $data[$key] = str_getcsv($value);
    }
}

print_r($data);

Ausgang:

Array
(
    [1] => Array
        (
            [0] => Alabama
            [1] => 143,072
            [2] => 5.5
            [3] => -1.1
        )
...

Verwenden Sie array_map(), um CSV in Array in PHP zu konvertieren

Die obigen Codeausschnitte verwendeten Schleifen oder Vorverarbeitung, um CSV in ein Array zu konvertieren. Es gibt jedoch eine bessere, schnellere und einfach zu lesende Methode, um CSV-Dateien in PHP mit den Funktionen array_map() und file() in ein Array zu konvertieren.

$csv = array_map('str_getcsv', file('state_housing_values.csv'));
print_r($csv);

Ausgang:

Array
(
    [0] => Array
        (
            [0] => State
            [1] => Price
            [2] => 1-year change
            [3] => 1-year forecast
        )

...

    [50] => Array
            (
                [0] => Wyoming
                [1] => 256,089
                [2] => 5.7
                [3] => -1.6
            )

)

Diese Funktionen können CSV-Dateien mit vielen Werten verarbeiten, und um dies zu demonstrieren, verwenden wir die Funktion array_map() für eine CSV-Datei, die Hebelwirkungsdaten über 1857 Zeilen und 17 Spalten enthält, und entfernen auch den Header des Arrays.

$csv = array_map('str_getcsv', file('leverage.csv'));
unset($csv[0]);
print_r($csv);

Die Ausgabe des Codes (der bei 0,257 Sekunden beendet wurde) ist unten.

Array
(
    [1] => Array
        (
            [0] => 001300
            [1] => 20150331
            [2] => 2015
            [3] => 1
            [4] => INDL
            [5] => C
            [6] => D
            [7] => STD
            [8] => USD
            [9] => 2015Q1
            [10] => 2015Q1
            [11] => 45357.0000
            [12] => 781.7070
            [13] => 5661.0000
            [14] => 15432.0000
            [15] => A
            [16] => 104.3100
        )

...
    [1856] => Array
        (
            [0] => 252940
            [1] => 20171231
            [2] => 2017
            [3] => 3
            [4] => INDL
            [5] => C
            [6] => D
            [7] => STD
            [8] => USD
            [9] => 2017Q4
            [10] => 2017Q3
            [11] =>
            [12] =>
            [13] =>
            [14] =>
            [15] => A
            [16] => 7.2700
        )

)

Die CSV-Dateien sind unten verfügbar, um mit dem Code zu spielen.

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

Verwandter Artikel - PHP CSV

Verwandter Artikel - PHP Array