2012-05-22 63 views
0

我試圖從查詢創建CSV,我需要的數據以適合的格式如下:創建一個數組的數組喂CSV功能

header("Content-type: text/csv"); 
header("Content-Disposition: attachment; filename=file.csv"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 

$array = array(
    array("data11", "data12", "data13"), 
    array("data21", "data22", "data23"), 
    array("data31", "data32", "data23")); 
outputCSV($array); 

我習慣凝集像數據這個:

while ($row = mysql_fetch_array($result)){ 
    $values[] = $row['value']; 
} 

我怎樣才能通過outputCSV一個合適的數組?

+0

如果你只是想將數據從一個MySQL的CSV,爲什麼不使用['SELECT ... INTO OUTFILE'](HTTP ://dev.mysql.com/doc/en/select-into.html)? – eggyal

+0

我其實不知道 - 非常方便。儘管我簡化了我的問題,但需要具備對數據進行處理的能力,所以我不確定這對我來說是最好的解決方案。 – Chords

回答

4
function outputCSV($rows, $fieldNames = array()) 
{ 
    if ($fp = fopen('php://output', 'w')) { 
     if ($fieldNames) { 
      fputcsv($fp, $fieldNames); 
     } 
     foreach ($rows as $row) { 
      fputcsv($fp, $row); 
     } 
     fclose($fp); 
    } 
} 
+0

您可以使用'STDOUT'常數而不是打開/關閉'php://輸出'。請參閱http://php.net/manual/en/features.commandline.io-streams.php – eggyal

+0

@eggyal:Do ** not **使用'STDOUT',因爲它繞過了輸出緩衝區。相反,使用'php://輸出' – webbiedave

+0

我沒有意識到這一點!你能引用一個參考嗎?我所能找到的是[建議您只使用常量'STDIN','STDOUT'和'STDERR',而不是使用這些包裝手動打開流。](http://php.net/manual/en/wrappers .php.php) – eggyal

1

循環在你$array,呼籲fputcsv()

foreach ($array as $fields) fputcsv(STDOUT, $fields); 
0
$values = array(); 

while ($row = mysql_fetch_array($result)) { 
    $values[] = $row; 
} 

outputCSV($values);