CSVデータをWEBで出力したい場面はよくありますよね。この記事では、PHPでCSVデータを連想配列に変換してから、ページに出力する方法を紹介します。
CSVデータから連想配列に変換する関数を定義する
まずはCSVデータから連想配列に変換する関数を作ります。今回のCSVデータ名を引数として渡します。また、CSVデータを保存する場所までのパス(サンプルでは、/path-to-csv-file/)は適宜変更してくださいね。
/**
* CSVの内容を連想配列で出力
* @string $file_name CSVファイル名
*/
function convert_csv_to_array( $file_name ) {
$csv = array();
$file = $_SERVER['DOCUMENT_ROOT'] . '/path-to-csv-file/' . $file_name . '.csv';
$fopen = fopen( $file, "r" );
if ( $fopen ) {
// CSVを配列に変換
while ( ( $data = fgetcsv( $fopen, 0, ',' ) ) !== FALSE ) {
$csv[] = $data;
}
// 連想配列に変換
$keys = array_shift( $csv );
$result = array_map( function ( $row ) use ( $keys ) {
return array_combine( $keys, $row );
}, $csv );
// [] => 空を削除
$result = array_map( function ( $row ) {
unset( $row[''] );
return $row;
}, $result );
// 降順にソート(オプション)
krsort( $result );
return $result;
} else {
die( 'CSVファイルが開けませんでした。' );
}
}
CSVデータを用意する
テストで表示させるためにCSVのダミーデータを作ります。
一列目は項目名を入れてください。
今回はダミーデータで3件分を用意しています。
ID,name,sex,birthday
1,山根 健児,男,1972/8/2
2,三輪 銀之助,男,1983/4/13
3,長尾 ひとみ,女,1980/4/30
連想配列を出力する
出力したいところに以下のコードを記述します。 [ csv-file-name.csv ] にCSVデータの名前を入れます。ループ内では、CSVの一行目に設定した項目名で取得していきます。
CSVのパスがうまく通っていない場合は、「ファイルが開けませんでした。」と表示されます。
<ul>
<?php $results = convert_csv_to_array( 'csv-file-name.csv' ); ?>
<?php foreach ( $results as $key => $value ): ?>
<li>
<div><?php echo $value['ID'] ?></div>
<div><?php echo $value['name'] ?></div>
<div><?php echo $value['sex'] ?></div>
<div><?php echo $value['birthday'] ?></div>
</li>
<?php endforeach; ?>
</ul>
これでCSVデータが来ても怖くないですね。