2013-07-30 5 views
0

У меня есть сценарий, который превращает результат запроса базы данных в файл csv. Первая строка csv-файла должна быть именами полей того, что определено в запросе. Вот то, что я до сих пор:преобразование данных db в csv с строкой заголовка в php

$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 (покончит с, если условия)? Возможно, сделать это за пределами цикла? или PDO выводит имена столбцов перед извлечением данных? Спасибо.

ответ

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); 
} 
0

Есть ли более удобный способ заполнить имена столбцов в первой строке csv (покончить с условием if)?

No.

Возможно, сделать это вне цикла?

Ваш код выводит имена столбцов из ключей выбранной строки и, как таковые, должен находиться внутри цикла.

PDO выводит имена столбцов перед извлечением данных?

Для этого потребуется дополнительный запрос или сохранение метаданных в противном случае. Оба из них являются дополнительными работы.

Смежные вопросы