簡體   English   中英

在CSV導出中輸出列標題

[英]Outputting Column titles in CSV Export

我有這個導出到csv文件的查詢。 它工作得很好我唯一想不通的是我需要導出列標題,並讓它們顯示為全名,用戶名,標志和原因。 下面是代碼,它導出所有行很好,但我不知道如何導出列標題上面的列標題。

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




//SQL Query for Data
$sql = "SELECT ui.first_name, ui.last_name, u.username,
    if(u.flag=1,'BLK', if(u.flag=2,'NAA','')) flag,
    if(u.flag!=0, IFNULL(ui.note,''),'') reason
FROM user u
LEFT JOIN user_info ui ON ui.user_id=u.id
WHERE u.flag!=0;";

//Prepare Query, Bind Parameters, Excute Query
$STH = $sam_db->prepare($sql);
$STH->execute();



//Export to .CSV
$fp = fopen('php://output', 'w');
//fputcsv($fp);
while ($row = $STH->fetch(PDO::FETCH_NUM)) fputcsv($fp,$row);
fclose($fp);

一種方法是通過關聯獲取第一個結果,那些關聯索引無論如何都是列。 應用array_keys來獲取它們,然后首先添加標題,然后是第一個獲取的行,然后循環其余的。

// first set
$first_row = $STH->fetch(PDO::FETCH_ASSOC);
$headers = array_keys($first_row);
// $headers = array_map('ucfirst', $headers); // optional, capitalize first letter of headers
fputcsv($fp, $headers); // put the headers
fputcsv($fp, array_values($first_row)); // put the first row

while ($row = $STH->fetch(PDO::FETCH_NUM))  {
    fputcsv($fp,$row); // push the rest
}
fclose($fp);

您只需使用HTML的<table>標簽在頁面中以表格形式顯示結果,即可獲得CSV列。

$result = "<table>";
    while ($row = $STH->fetch(PDO::FETCH_NUM)){
    $result .= "<tr><td>$row1</td><td>$row2</td><td>$row3</td></tr>";
}
$result .= "</table>";
fputcsv($fp, $result);

$row1, $row2 ,我的意思是你在結果集中得到的值

答案取決於您是否已經知道列名。 好像你這樣做(例如你已經在調用'Select ui.firstname ......')

如果不這樣做,可以通過查看此線程來獲取名稱: 什么是Select語句以返回表中的列名

獲得名稱后,只需創建一個包含名稱的行,並通過修改代碼將其添加到文件中:

//Export to .CSV
$columnNamesRow = "FirstName, LastName, UserName";
$fp = fopen('php://output', 'w');
fputcsv($fp, $columnNamesRow);

//fputcsv($fp);
while ($row = $STH->fetch(PDO::FETCH_NUM)) fputcsv($fp,$row);
fclose($fp);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM