2012-06-04 14 views
6

Ich muss eine Abfrage ausführen, die mehrere Zeilen zurückgibt und es in eine CSV-Datei exportieren. Ich muss die Zellen jedoch in eine bestimmte Reihenfolge bringen.Erstellen von CSV mit Array

Also sagen wir, mein Tisch ist ID, Name, Adresse, Frau ausgelegt. Ich muss eine CSV in der Reihenfolge ID, Adresse, Ehefrau, Name erstellen. Ich dachte mir, ich könnte einfach ein Array in der richtigen Reihenfolge machen und dann einen csv damit machen, aber nach einer Stunde Googeln kann ich nicht herausfinden, wie man einen csv mit einem Array macht.

Es gibt fputcsv, aber das erfordert eine vorgefertigte csv. Außerdem hatte ich gehofft, dass es einen Codeigniter Weg gibt, es zu tun.

Ich habe versucht, aber der Fehler besagt, dass die Download-Helper-Datei eine Zeichenfolge nicht ein Array erwartet.

Antwort

16

Hier einige Code, den ich verwenden ... Sie die Spalten anpassen könnten Sie in den Export benötigen ...

Hinweis: Diese CSV wird direkt an php://output gesendet, die direkt an den Ausgabepuffer schreibt. Das bedeutet Sie speichern keine .csv-Dateien auf dem Server und es kann eine viel größere Dateigröße behandeln, die ein riesiges Array erstellt und dann versucht, durch es zu durchlaufen.

Dies sollte Ihnen eine gute Vorstellung davon geben, wie ein CSV-Export funktioniert. Ich benutze den Datei-Download-Helfer von CodeIgniter nicht, daher kann ich Ihnen an dieser Stelle nicht helfen.

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

gerettet Just my ass, Dank ! – Mike

+0

Gut zu lesen, Mike! –

4

Diese kurze Skripte beim Aufbau der CSV und ermöglicht es auch zum Download:

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', ','); 

Sie können hier den vollständigen Beitrag lesen:

PHP Array to CSV - Download