Trabajo con CSV en PHP: guía completa
CSV (Valores Separados por Comas) es uno de los formatos más populares para el intercambio de datos tabulares. PHP tiene tanto funciones integradas para trabajar con CSV como potentes bibliotecas de terceros. En este artículo, analizaremos todas las formas principales de leer, escribir y procesar archivos CSV en PHP.
Funciones integradas de PHP para trabajar con CSV
PHP proporciona varias funciones integradas que permiten trabajar con archivos CSV sin instalar bibliotecas adicionales. Las principales son:
fgetcsv()— lee una línea de un archivo y la convierte en un arrayfputcsv()— escribe un array en un archivo en formato CSVstr_getcsv()— analiza una cadena CSV en un array
Lectura de un archivo CSV con fgetcsv
La función fgetcsv() lee una línea de un archivo abierto y la devuelve como un array. Ejemplo de lectura de todo el archivo:
<?php$filename = 'data.csv';
if (($handle = fopen($filename, 'r')) !== false) { while (($data = fgetcsv($handle, 1000, ',')) !== false) { // $data es un array con los datos de la línea echo implode(' | ', $data) . ""; } fclose($handle);}?>Parámetros de la función fgetcsv():
handle— descriptor del archivolength— longitud máxima de la línea (normalmente 0 o 1000)separator— delimitador de campos (por defecto coma)enclosure— carácter de encerramiento de campos (por defecto comillas dobles)escape— carácter de escape (por defecto barra invertida)
Escritura de datos en un archivo CSV
Para escribir se utiliza la función fputcsv(). Toma un array y lo convierte en una cadena CSV:
<?php$data = [ ['Nombre', 'Edad', 'Ciudad'], ['Iván', 25, 'Moscú'], ['María', 30, 'San Petersburgo'],];
$filename = 'output.csv';$handle = fopen($filename, 'w');
foreach ($data as $row) { fputcsv($handle, $row, ';', '"');}
fclose($handle);echo "¡El archivo $filename se ha creado correctamente!";?>En este ejemplo, usamos punto y coma (;) como delimitador, lo que es común en archivos CSV de habla hispana.
Procesamiento de archivos CSV grandes
Al trabajar con archivos grandes (cientos de miles de líneas), es importante no cargar todo el archivo en memoria. Use la lectura línea por línea:
<?phpfunction processLargeCSV($filename) { $handle = fopen($filename, 'r'); // Omitir el encabezado si existe $header = fgetcsv($handle); while (($row = fgetcsv($handle)) !== false) { // Procesar cada línea $processed = array_map('trim', $row); // Aquí puede ir su lógica de procesamiento yield $processed; // Usamos un generador } fclose($handle);}
// Usoforeach (processLargeCSV('bigdata.csv') as $row) { // Trabajamos con cada línea por separado echo "Línea procesada: " . implode(',', $row) . "";}?>El uso de generadores (yield) permite procesar archivos de cualquier tamaño sin desbordar la memoria.
Biblioteca League\\Csv para trabajo avanzado
Para tareas más complejas, se recomienda usar la biblioteca league/csv. Proporciona una interfaz orientada a objetos conveniente y muchas funcionalidades adicionales.
Instalación mediante Composer:
composer require league/csvEjemplo de uso:
<?phprequire 'vendor/autoload.php';
use League\\Csv\\Reader;use League\\Csv\\Writer;
// Lectura de CSV$csv = Reader::createFromPath('data.csv', 'r');$csv->setHeaderOffset(0); // La primera línea es el encabezado
// Obtener todos los registros como array asociativo También en la biblioteca
Planificador de tareas en C# (.NET): Quartz.NET, Hangfire y Coravel
Procesamiento de imágenes en Node.js: bibliotecas y herramientas
Gradle Kotlin DSL: guía completa con ejemplos para Kotlin
Creación de aplicaciones CLI en TypeScript: visión general de frameworks y herramientas