Konvertieren Sie eine CSV-Datei in ein Array in PHP
-
Verwenden Sie
fopen()
undfgetcsv()
, um CSV in Array in PHP zu konvertieren -
Verwenden Sie
str_getcsv()
, um CSV in Array in PHP zu konvertieren -
Verwenden Sie
array_map()
, um CSV in Array in PHP zu konvertieren
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 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.
LinkedInVerwandter Artikel - PHP CSV
Verwandter Artikel - PHP Array
- Wie man die erste und letzte Iteration in einer foreach-Schleife in PHP bestimmt
- Wie man in PHP ein Array in eine Zeichenkette konvertiert
- Wie man das erste Element eines Arrays in PHP erhält
- Wie Sie ein Array in PHP echoen oder drucken
- Wie löscht man ein Element aus einem Array in PHP
- Wie man leere Array-Elemente in PHP entfernt