PHP
CSV

配列をたった一行で CSV に変換

More than 1 year has passed since last update.
foreach ($array as $values) fputcsv(STDOUT, $values);

配列をCSVとして出力する際に、意外と面倒なのがフィールド値のエスケープです。値の中にあるダブルクォートや改行などを適切にエスケープしなければなりません。そんなときは fputcsv() を使いましょう。

>例

$csv = array(
   array('1111', '1111', '1111', '1111'),
   array('2222', '2222', '2222', '22,22'), // カンマ混在
   array('3333', '3333', '3333', "33\n33"),// 改行混在
   array('title' => 'タイトル', // 連想配列
          'name'  => '名",前',// ダブルクォート,カンマ混在
          'hoge'  => 'ほげ',
          'fuga'  => 'ふが'),
   
);

header("Content-Type: application/octet-stream");
foreach ($csv as $fields) fputcsv(STDOUT, $fields);

>出力

1111,1111,1111,1111
2222,2222,2222,"22,22"
3333,3333,3333,"33
33"
タイトル,"名"",前",ほげ,ふが

CSVの制御文字が正しくエスケープされているのがわかります。
連想配列はキーを無視して値のみ使用されるので、DBから取得した値のCSV出力などで楽になるでしょう。

Excel でもちゃんと表示されます。
test.csv