2017-08-30 157 views
0

我直接打印到CSV文件,以便用戶可以保存查詢結果,在這種情況下,從存檔中複製報告。打印到CSV文件的問題

我的數據是兩位信息 - 標題和日期,我試圖添加到文件的前面,然後是報表的行。

$f = fopen('php://memory', 'w'); 
// loop over the input array 

    // Add report title 
    fputcsv($f, $reportname, $delimiter); 

    //add the date 
    fputcsv($f, $reportdate, $delimiter); 

//add report text 
foreach ($array as $line) { 
    // generate csv lines from the inner arrays 
    fputcsv($f, $line, $delimiter); 
} 

會發生什麼是從循環中的數組文本打印到文件中 - 但前兩行沒有。對於我的生活,我無法弄清楚。

任何建議將受到歡迎,謝謝。

+0

$ reportname,$ reportdate都設置並且是數組?可以測試'fputcsv($ f,array('nameeeeeeeeeeeee'),$ delimiter);' – rtfm

+0

解決了它。謝謝。那很完美。 –

+0

我很困惑,根據你選擇的答案解決了它 – rtfm

回答

0

嘗試使用

$file='Statement '.$date.".csv"; 
header('Content-Type: application/csv'); 
header('Content-Disposition: attachment; filename="'.$file.'";'); 

然後就回聲出在CSV格式的內容。

$ct = count($data); 
$ctr = 0; 
foreach($datas as $data) { 

    //workaround for removing quotes 
     $val = explode(",", $data); 

     //create a seperate function for this 
     $cv = count($val); 
     $cvi = 0; 
     foreach ($val as $k => $v){ 
      echo $v; 
      //append comma except for last word 
      $cvi++; 
      if($cvi < $cv) 
       echo ","; 
     } 

     $ctr++; 
     if ($ctr < $ct) echo "\n";//except for last line terminate with \n 

    } 

我有類似的問題,並從SO本身得到這個。長期以來一直在使用它。如果你想保持格式化,這很有用

+0

我沒有嘗試這種方法,因爲另一種解決方案工作並且需要對代碼進行較少的更改 - 但謝謝。 –

1

這已經解決了,歸功於https://stackoverflow.com/users/8011997/rtfm。 解決方案是 - 我想發送到文件的值必須是數組。所以我將它們轉換爲數組 - (數組) - $ var_Name-並且它完美地工作。

謝謝!

0

你也可以在fputcsv失敗時使用fwrite函數。