2012-06-04 68 views
6

我需要運行一個查詢,該查詢將返回多行並將其導出爲CSV。我必須按照特定順序放置單元格。使用數組構建CSV

因此,讓我說我的表是奠定身份證,姓名,地址,妻子。我需要按ID,地址,妻子,姓名的順序建立一個csv。我想我可以按照正確的順序創建一個數組,然後用它做出一個csv,但經過一個小時的搜索後,我無法找到如何用數組創建一個csv。

有fputcsv但需要預先製作的csv。此外,我希望有一個codeigniter的方式做到這一點。

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

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

我試過,但錯誤表示下載幫助文件期望字符串不是數組。

回答

16

下面是一些代碼我使用...你可以調整你的出口需要的列...

注:此CSV直接發送到php://output直接寫入到輸出緩衝器。這意味着你沒有在服務器上保存任何.csv文件,並且它可以處理大得多的文件大小,它構建了一個巨型數組,然後嘗試循環遍歷它。

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; 

這應該會給你一個關於CSV導出工作原理的精彩畫面。我沒有使用CodeIgniter的文件下載助手,所以我無法幫助你。

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

剛纔救了我的屁股,謝謝! – Mike

+0

很高興看到Mike! –

4

這短短的腳本建立CSV,並允許您也可以下載它:

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

你可以在這裏閱讀完整的信息:

PHP Array to CSV - Download