Help us understand the problem. What is going on with this article?

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

More than 5 years have 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

caesar_cat
iOS/macOS Developer (Ojbective-C, Swift) Server-side/Front-end Developer (PHP, node) Infra Engineer (Linux, AWS)
https://www.qnote.co.jp
qnote
猫と音楽とITをテーマにiOS/Android/Unity/Web/デザインの受託開発をやり続けて13年目の町工場的会社です。従業員の大半は猫です。
http://www.qnote.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away