仕事でcsv出力をする機会があって、その時にパッとやり方が思いつかなかったので備忘録。
もっと良いやり方があれば、教えていただけると幸いです。
#コード
以下の配列がコントローラからビューに渡されている想定です。
<?php
/*
* Controller
*/
$data = array(
0 => array(
'name'=>'一郎',
'age'=>10,
),
1 => array(
'name'=>'次郎',
'age'=>20,
),
2 => array(
'name'=>'太郎',
'age'=>30,
)
);
?>
<?php
/*
* View
*/
//出力情報の設定
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=list.csv");
header("Content-Transfer-Encoding: base64");
//変数の初期化
$csv = null;
//1行目のラベル
$csv .= '"名前","年齢"' . "\n";
//出力データ
foreach($d as $data) {
$csv .= '"' . $d['name'] . '","' . $d['age'] . '"' . "\n";
}
//BOMを追加
$csv = "\xEF\xBB\xBF" .$csv;
//CSVファイル出力
echo $csv;
?>
#気になること
小規模のデータベースから比較的少ない量のレコード(100件程度)をcsvにまとめる形だったので、このように単純にできるが、大規模だとmax_execetion_timeに引っかかるみたいな話も聞いた。
fputcsv使うのが良いのかなと思いますが...