CSV で出力する際に 0 埋めの数値やカンマを含む文字列等の可能性を考慮して、すべてのセルにダブルクォーテーションをつけた状態にしておきたい。
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="[適当なファイル名].csv"');
$data = [];
$data[] = [
'1行目1列目',
'1行目2列目',
'1行目3列目',
];
$data[] = [
'2行目1列目',
'2行目2列目',
'2行目3列目',
];
$csv = '';
foreach ($data as $row) {
// ダブルクォーテーションで配列の値を囲む
$row = array_map(
function ($value) {
$value = str_replace('"', '""', $value);
return "\"{$value}\"";
},
$row
);
$csv .= implode(',', $row) . "\r\n";
}
$csv = mb_convert_encoding($csv, 'sjis-win', mb_internal_encoding());
echo $csv;
ダブルクォーテーション込みの配列を 1 行毎にカンマ区切りで変数に格納
最後に文字コードを変換して出力を行う