LoginSignup
41

More than 5 years have passed since last update.

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

Last updated at Posted at 2012-10-10
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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41