2012-06-04 15 views
6

necesito para ejecutar una consulta que devolverá múltiples filas y exportarlo a un archivo CSV. Sin embargo, tengo que poner las celdas en cierto orden.CSV Edificio con arreglo

lo que permite decir mi mesa se presenta la identificación, nombre, dirección, esposa. Necesito construir un csv en el orden de identificación, dirección, esposa, nombre. Pensé que podría hacer una matriz en el orden correcto y luego crear un csv con eso, pero después de una hora de búsqueda en Google no puedo averiguar cómo hacer una csv con una matriz.

Hay fputcsv pero que requiere un csv pre-hechos. Además, esperaba que hubiera una manera de hacerlo.

public function export() { 
    $this->load->helper('download'); 

    $data[1] = 'i like pie'; 
    $data[2] = 'i like cake'; 
    force_download('result.csv', $data); 
} 

Lo intenté pero el error decía que el archivo auxiliar de descarga esperaba una cadena, no una matriz.

Respuesta

16

Aquí hay un código que utilizo ... se puede ajustar las columnas que necesita en la exportación ...

Nota: Este CSV se envía directamente a php://output el que escribe directamente en la memoria intermedia de salida. Esto significa que no estás guardar los archivos .csv en el servidor y puede manejar un tamaño de archivo mucho más grande que la construcción de una matriz gigante y luego tratar de bucle a través de él.

header("Content-type: application/csv"); 
    header("Content-Disposition: attachment; filename=\"Jobs_".date('M.j.y', $from)."-".date('M.j.y', $to).".csv\""); 
    header("Pragma: no-cache"); 
    header("Expires: 0"); 

    $handle = fopen('php://output', 'w'); 
    fputcsv($handle, array(
     'JobId', 
     'Template', 
     'Customer', 
     'Status', 
     'Error', 
     'PDF', 
     'Run Time', 
     'Wait Time', 
     'Server' 
    )); 

    foreach ($jobs as $jobData) { 
     fputcsv($handle, array(
      $job->getId(), 
      $job->getTemplate(), 
      $jobData['customers_firstname'].' '.$jobData['customers_lastname'], 
      $status, 
      $error, 
      $jobData['products_pdfupload'], 
      $job->getRunTime(), 
      $job->getWaitTime(), 
      $jobData['server'] 
     )); 
    } 

    fclose($handle); 
    exit; 

Esto debería darle una buena imagen mental de cómo funciona una exportación CSV. No uso CodeIgniter's file download helper, así que no puedo ayudarte en ese aspecto.

2
<?php 

$list = array (
    array('aaa', 'bbb', 'ccc', 'dddd'), 
    array('123', '456', '789'), 
    array('"aaa"', '"bbb"') 
); 

$fp = fopen('file.csv', 'w'); 

foreach ($list as $fields) { 
    fputcsv($fp, $fields); 
} 

fclose($fp); 
?> 
+0

acaba de salvar mi culo, gracias ! – Mike

+0

¡Es bueno leer eso Mike! –

4

Este corto scripts de construcción de la CSV y te permite descargar también:

function convert_to_csv($input_array, $output_file_name, $delimiter) 
{ 
    /** open raw memory as file, no need for temp files */ 
    $temp_memory = fopen('php://memory', 'w'); 
    /** loop through array */ 
    foreach ($input_array as $line) { 
     /** default php csv handler **/ 
     fputcsv($temp_memory, $line, $delimiter); 
    } 
    /** rewrind the "file" with the csv lines **/ 
    fseek($temp_memory, 0); 
    /** modify header to be downloadable csv file **/ 
    header('Content-Type: application/csv'); 
    header('Content-Disposition: attachement; filename="' . $output_file_name . '";'); 
    /** Send file to browser for download */ 
    fpassthru($temp_memory); 
} 

/** Array to convert to csv */ 
$array_to_csv = Array(Array(12566, 'Enmanuel', 'Corvo'), Array(56544, 'John', 'Doe'), Array(78550, 'Mark', 'Smith')); 
convert_to_csv($array_to_csv, 'report.csv', ','); 

se puede leer el post completo aquí:

PHP Array to CSV - Download