【PHP】自分用CSV出力メソッド。

メモ

function exportCsv($fileName, $data, $header = null) {
	// headerがあれば先頭行に追加
	if(!is_null($header)) array_unshift($data, $header);
	// tmpファイルストリームをオープン
	$fp = tmpfile();
	// データの書き込み
	foreach($data as $v) fputcsv($fp, $v, ',', '"');
	// ファイルポインタを先頭へ移動
	rewind($fp);
	// ストリームを文字列に読み込む
	$csv = stream_get_contents($fp);
	// 文字コードをSJISにコンバート(excelで開いた際の文字化け対策)
	$csv = mb_convert_encoding($csv, 'SJIS', mb_internal_encoding());
	// ファイルポインタを閉じる
	fclose($fp);
	// 指定したファイル名の拡張子やパスを取り除く
	$fileName = basename($fileName);
	// ダウンロード用のヘッダーを出力
	header('Content-Disposition:attachment; filename="'.$fileName.'.csv"');
	header('Content-Type:application/octet-stream');
	header('Content-Length:'.strlen($csv));
	echo $csv;
	die();
}

$fileName:保存したいファイル名を指定
$data:CSVファイルに書き込みたいデータを連想配列で指定
$header:先頭行に配置するデータを配列で指定(1行分)

以下渡すデータの例。

// ヘッダー(先頭行)
$header = array(
	'name_1',
	'name_2',
	'name_3',
	'name_4',
	'name_5',
);
// データ部分(基本foreachで回す)
$data[] = array(
	'col_data_1',
	'col_data_2',
	'col_data_3',
	'col_data_4',
	'col_data_5'
);
$data[] = array(
	'col_data_1',
	'col_data_2',
	'col_data_3',
	'col_data_4',
	'col_data_5'
);