PHPでCSVをエクスポートする際にダブルクォーテーションで囲って出力する

2020-06-03

PHPでCSVをエクスポートする際にダブルクォーテーションで囲って出力する

このエントリーをはてなブックマークに追加

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行毎にカンマ区切りで変数に格納

最後に文字コードを変換して出力を行う