Logo de islavisual
Logo de islavisual IslaVisual
imagen de sección

Ultima revisión 22/12/2012

Convertir de Array a CSV en PHP (array2CSV)

array2csv es una función que permite convertir un array asociativo en un archivo CSV de forma muy sencilla. Como veréis, sólo hay que enviarle un array bien formado.

Si se quiere presentar por pantalla, se deben eliminar las cabeceras del final del código. Si, por el contrario se desea enviar a Excel habrá que dejar las cabeceras (los header) del código como están y saltará solo.

Por hacer una pequeña introducción, Los ficheros CSV (Comma Separated Values) son un tipo de documento en formato abierto sencillo para representar datos en forma de tabla, en las que las columnas se separan por comas (o punto y coma en donde la coma es el separador decimal como España) y las filas por saltos de línea. Los campos que contengan una coma, un salto de línea o una comilla doble deben ser encerrados entre comillas dobles.

El formato CSV es muy sencillo y no indica un juego de caracteres concreto, cómo van situados los bytes y ni tan si quera, el formato para el salto de línea. Estos puntos deben indicarse muchas veces al abrir el fichero, por ejemplo, con una hoja de cálculo.

/*     **************************************************************************************************************************************************************************************************
    FUNCIÓN PARA CONVERTIR UN ARRAY ASOCIATIVO EN UNA CADENA EN FORMATO CSV MS-DOS.
    PARÁMETROS:
    -----------
    $data        --> ES EL ARRAY FUENTE
    $separator    --> PARA SEPARAR LOS CAMPOS Y VALORES.
    $level        --> NO CAMBIAR. INDICA EL NODO DÓNDE ESTA. SE USA PARA EL PROCESO RECURSIVO.
    ***************************************************************************************************************************************************************************************************/
/**
 * Function for convert an array associative at CSV string.
 * @param string $data The source array.
 * @param string $separator Separator of fields and values.
 * @param int $level Indicates recursive level. 
 * @return string Returns a string separated by semicolons that corresponds with to structured a CSV file.
 */

function array2csv($arr,$separator=";", $level=0){
    $lines  = array();
    $xCount = 0;
    foreach ($arr as $key => $value) {
        if(is_array($value)){
            $lines[] = str_repeat($separator, $level).utf8_decode($key).array2csv($value, $separator, $level+1);
        } else {
            $lines[] = ($xCount==0?($level==0?"":$separator):str_repeat($separator, $level)).utf8_decode($key).$separator.utf8_decode($value);    
        }
        $xCount++;
    }
    return  implode("\n", $lines);
}

$arr = array("user" => "root", "user_id" => "1", "password" => "contraseña", "mensaje" => array("id" => "1", "descripcion" => "Descripción del texto", "prioridad" => "Media"));
$csv = array2csv($arr);
header("Content-type: text/csv; charset=utf-8");
header("Content-Disposition: attachment; filename=RequestResponse.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo $csv;

Espero que os sea útil alguna vez.

Sobre el autor

Pablo Enrique Fernández Casado

CEO de IslaVisual, Manager, Full Stack Analyst Developer y formador por cuenta ajena con más de 25 años de experiencia en el campo de la programación y más de 10 en el campo del diseño, UX, usabilidad web y accesibilidad web. También es escritor y compositor de música, además de presentar múltiples soft kills como la escucha activa, el trabajo en equipo, la creatividad, la resiliencia o la capacidad de aprendizaje, entre otras.

Especializado en proveer soluciones integrales de bajo coste y actividades de consultoría de Usabilidad, Accesibilidad y Experiencia de Usuario (UX), además de ofrecer asesoramiento en SEO, optimización de sistemas y páginas web, entre otras habilidades.