PHPでCSVデータを書き出す

January 27th, 2011

DEMO

PHPでCSVデータを書き出す作業をしたのでメモしておきます。


作業手順

  • カンマ区切りで横軸のセルが移動する
  • 改行コードで縦軸のセルが移動する
  • CSV形式のHTTPヘッダを定義して出力する

参考サイト


値を定義する

文字コードを「sjis-win」に変換する。

<?php
// CSVに出力する配列
$data_title = array('ID', '品名', '価格');
$data = array(
    array('id'=>1, 'name'=>'apple', 'price'=>'100'),
    array('id'=>2, 'name'=>'grape', 'price'=>'180'),
    array('id'=>3, 'name'=>'orange', 'price'=>'110'),
);

// タイトル設定
$csv = "";
foreach ($data_title as $i => $value) {
    $value = mb_convert_encoding($value, 'sjis-win', 'utf-8');
    $csv .= ($i ? ',' : ''). $value;
}
$csv .= "\n"; // 改行コード

// コンテンツ設定
foreach ($data as $value) {
    $value = mb_convert_variables('sjis-win', 'utf-8', $value);
    $csv .= $value['id']. ",". $value['name']. ",". $value['price']. "\n";
}
?>

ヘッダを定義して出力する

<?php
// CSVのHTTPヘッダ
header("Content-Type: application/octet-stream; charset=sjis-win");
header("Content-Disposition: attachment; filename=hoge.csv");
echo $csv;
?>

DEMO

January 27th, 2011