使用php中的标题行将db数据转换为csv

时间:2013-07-30 13:31:43

标签: php csv pdo

我有一个脚本可以将数据库查询结果转换为csv文件。 csv文件的第一行需要是查询中定义的字段名称。这是我到目前为止所做的:

$fp = fopen('report.csv', 'w');
$column_names = array();
foreach($dbh->query($base_query, PDO::FETCH_ASSOC) as $row) {
  if (empty($column_names)) {
    $column_names = array_keys($row);
    fputcsv($fp, $column_names);
  }
  // additional processing omitted ...
  fputcsv($fp, $row);
}
fclose($fp);

是否有更好的方法来填充csv第一行中的列名(废除if条件)?也许在循环之外呢?或者在获取数据之前让PDO输出列名? 感谢。

2 个答案:

答案 0 :(得分:1)

如果您将不同的操作彼此分开,总有一种更好的方法。

//database part
$data = $dbh->query($base_query)->fetchAll();

// header part
$fp = fopen('report.csv', 'w');
$column_names = array_keys($data[0]);
fputcsv($fp, $column_names);

// body part
foreach($data as $row) {
  // additional processing omitted ...
  fputcsv($fp, $row);
}

答案 1 :(得分:0)

  

有没有更好的方法来填充csv第一行中的列名(废除if条件)?

没有

  

也许在循环之外呢?

您的代码正在从获取的行的键中推断列名称,因此需要在循环内部。

  

PDO在获取数据之前输出列名吗?

这将需要额外的查询或以其他方式存储元数据。这两个都是额外的工作