分かりやすく、使いやすく。

配列を CSV に変換し、必要なエスケープを行う

スポンサーリンク

PHP で配列を CSV に変換するには fputcsv を使用すると簡単に変換できます。 fputcsv 関数は値にカンマやダブルクオテーションが含まれている場合、必要なエスケープを自動で行います。

php(書式)
1
fputcsv(出力先, 配列) 
  1. 1 行だけCSV 変換して標準出力に出力する
  2. 複数行を CSV 変換してファイルに出力する
  3. 連想配列(ハッシュ)を CSV に変換してファイルに出力する


1 行だけCSV 変換して標準出力に出力する

php(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
//変換する配列を作成
$ary_str = array(
                '12345',
                '日本語',
                'カンマあり,文字列',
                'ダブルクオテーション"のエスケープ確認',
            );
 
//CSV に変換して標準出力に表示
fputcsv(STDOUT, $ary_str); 

上記の実行結果は以下の通りです。カンマやダブルクオテーションを含む文字列はダブルクオテーションで囲まれ、さらにダブルクオテーションはエスケープされていることが分かります。

12345,日本語,"カンマあり,文字列","ダブルクオテーション""のエスケープ確認" 

複数行を CSV 変換してファイルに出力する

php(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//出力先のファイルを開きます
$res_file = fopen('output.csv', 'w+');
 
//変換する配列を作成
$ary_csv_lines = array();
$ary_csv_lines[0] = array('1行目の1列目','1行目の2列目','1行目の3列目');
$ary_csv_lines[1] = array('2行目の1列目','2行目の2列目','2行目の3列目');
$ary_csv_lines[2] = array('3行目の1列目','3行目の2列目','3行目の3列目');
$ary_csv_lines[3] = array('4行目の1列目','4行目の2列目','4行目の3列目');
$ary_csv_lines[4] = array('5行目の1列目','5行目の2列目','5行目の3列目');
 
//1 行ずつ CSV に変換してファイルに出力します
foreach($ary_csv_lines as $ary_csv_line){
    fputcsv($res_file, $ary_csv_line);
}
 
//出力先のファイルを閉じます
fclose($res_file); 

上記サンプルコードを実行すると、 output.csv に以下の内容が出力されます。

output.csv
1
2
3
4
5
1行目の1列目,1行目の2列目,1行目の3列目
2行目の1列目,2行目の2列目,2行目の3列目
3行目の1列目,3行目の2列目,3行目の3列目
4行目の1列目,4行目の2列目,4行目の3列目
5行目の1列目,5行目の2列目,5行目の3列目 

連想配列(ハッシュ)を CSV に変換してファイルに出力する

連想配列の場合も、実装方法は普通の配列と同じです。

php(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//出力先のファイルを開きます
$res_file = fopen('output.csv', 'w+');
 
//変換する連想配列(ハッシュ)を作成します
$ary_csv_lines = array();
$ary_csv_lines[0] = array('id' => 1, 'name' => 'PHP',    'type' => 'プログラミング言語');
$ary_csv_lines[1] = array('id' => 2, 'name' => 'MySQL',  'type' => 'データベース');
$ary_csv_lines[2] = array('id' => 3, 'name' => 'Oracle', 'type' => 'データベース');
$ary_csv_lines[3] = array('id' => 4, 'name' => 'Java',   'type' => 'プログラミング言語');
$ary_csv_lines[4] = array('id' => 5, 'name' => 'Perl',   'type' => 'プログラミング言語');
 
//1 行ずつ CSV に変換してファイルに出力します
foreach($ary_csv_lines as $ary_csv_line){
    //連想配列の場合、キーは無視して値だけが出力されます。
    fputcsv($res_file, $ary_csv_line);
}
 
//出力先のファイルを閉じます
fclose($res_file); 

上記サンプルコードを実行すると、 output.csv に以下の内容が出力されます。

output.csv
1
2
3
4
5
1,PHP,プログラミング言語
2,MySQL,データベース
3,Oracle,データベース
4,Java,プログラミング言語
5,Perl,プログラミング言語 
スポンサーリンク