0

データベース クエリの結果を 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 に列名を出力させますか? ありがとう。

4

2 に答える 2

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);
}
于 2013-07-30T13:39:24.083 に答える
0

csv の最初の行に列名を入力するより良い方法はありますか (if 条件を廃止します)?

いいえ。

おそらくループの外でそれを行いますか?

コードは、フェッチされた行のキーから列名を推測しているため、ループ内にある必要があります。

PDO はデータを取得する前に列名を出力しますか?

これには、追加のクエリまたはメタデータの保存が必要になります。どちらも余分な作業です。

于 2013-07-30T13:33:46.130 に答える