Trabajo con CSV en PHP: lectura, escritura y procesamiento de datos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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 array
  • fputcsv() — escribe un array en un archivo en formato CSV
  • str_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 archivo
  • length — 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/csv


Ejemplo 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

Recommendations