Convertir archivo CSV a matriz en PHP
-
Utilice
fopen()
yfgetcsv()
para convertir CSV a matriz en PHP -
Use el
str_getcsv()
para convertir CSV a matriz en PHP -
Use el
array_map()
para convertir CSV a Array en PHP
Los archivos de valores separados por comas (CSV) son una gran parte de la canalización de datos. Independientemente del lenguaje de programación, su aplicación tiene un lugar para CSV.
Los archivos CSV son populares para almacenar datos en formato de fila y columna. Por lo tanto, las matrices son la estructura de datos perfecta para mantener sus valores cuando procesamos archivos CSV dentro de nuestra aplicación PHP.
En este artículo, detallaremos y le mostraremos las funciones integradas de PHP que pueden permitirnos leer y convertir CSV en una matriz en PHP.
Utilice fopen()
y fgetcsv()
para convertir CSV a matriz en PHP
Para esta sección y las otras dos secciones, usaremos un archivo CSV que contiene valores de vivienda estatales (state_housing_values.csv
) con 51 filas y 4 columnas para mostrar cómo funcionan estas funciones.
Primero, necesitamos la función fopen()
para abrir el archivo CSV y apuntarlo a la función fgetcsv()
como primer argumento, con el resto de los argumentos opcionales. Los otros parámetros incluyen longitud
, separador
, recinto
y escape
.
Ahora, vamos a convertir el archivo CSV en una matriz.
$file = fopen('state_housing_values.csv', 'r');
while (($line = fgetcsv($file)) !== FALSE) {
var_dump($line);
}
fclose($file);
Producción :
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"
}
...
Antes de continuar, podemos eliminar el encabezado, que podría no ser necesario en nuestra base de código PHP. Para hacerlo, simplemente podemos agregar $line = fgetcsv($file)
antes del bucle while
.
$file = fopen('state_housing_values.csv', 'r');
$line = fgetcsv($file);
while (($line = fgetcsv($file)) !== FALSE) {
var_dump($line);
}
fclose($file);
Producción :
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"
}
...
Con esto, el encabezado ya no está en la matriz,
Es muy difícil trabajar con el formato de matriz anterior. Para que la matriz sea más funcional, necesitamos refactorizar el código y usar array_combine()
.
<?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.");
}
?>
Producción :
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"
}
...
Hay casos en los que el delimitador no es una coma ,
. Por lo tanto, necesitaremos especificar el delimitador.
Otros delimitadores podrían ser un punto y coma ;
, un espacio " "
, o un tabulador \t
. Para especificar el delimitador dentro de la función, puede seguir el código a continuación.
$delimiter = ';'; // semi-colon
fgetcsv($handle, 1000, $delimiter)
Use el str_getcsv()
para convertir CSV a matriz en PHP
Aquí, haremos uso de la función file()
para procesar el CSV, recorreremos el puntero del archivo usando el bucle foreach
y colocaremos cada valor dentro de la matriz $data
a través de str_getcsv()
función.
$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);
Producción :
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
)
...
Agregue algunos cambios al código anterior para eliminar el encabezado. Usaremos la declaración condicional if
para eliminar la primera matriz que contiene el encabezado.
foreach ($lines as $key => $value) {
if (!$key == 0) {
$data[$key] = str_getcsv($value);
}
}
print_r($data);
Producción :
Array
(
[1] => Array
(
[0] => Alabama
[1] => 143,072
[2] => 5.5
[3] => -1.1
)
...
Use el array_map()
para convertir CSV a Array en PHP
Los fragmentos de código anteriores usaban bucles o preprocesamiento para convertir CSV en una matriz. Sin embargo, existe un método mejor, más rápido y fácil de leer para convertir archivos CSV en una matriz dentro de PHP utilizando las funciones array_map()
y file()
.
$csv = array_map('str_getcsv', file('state_housing_values.csv'));
print_r($csv);
Producción :
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
)
)
Estas funciones pueden manejar archivos CSV con muchos valores y, para demostrarlo, utilizaremos la función array_map()
en un archivo CSV que contiene datos de apalancamiento en 1857 filas y 17 columnas, y también eliminaremos el encabezado. de la matriz
$csv = array_map('str_getcsv', file('leverage.csv'));
unset($csv[0]);
print_r($csv);
La salida del código (que salió a los 0,257 segundos) se encuentra a continuación.
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
)
)
Los archivos CSV están disponibles a continuación para jugar con el código.
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.
LinkedInArtículo relacionado - PHP CSV
Artículo relacionado - PHP Array
- Cómo determinar la primera y la última iteración en un bucle de foreach en PHP
- Cómo convertir un array a una cadena en PHP
- Cómo obtener el primer elemento de un array en PHP
- Cómo hacer eco o imprimir un array en PHP
- Cómo eliminar un elemento de un array en PHP
- Cómo quitar elementos de array vacíos en PHP