CSVデータを連想配列に変換して出力したい

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データが来ても怖くないですね。

石井秀幸@WEBデザイナー
横浜WordPress Meetup 主宰/株式会社ノクチ基地 取締役/モンゼンクリエイティブ合同会社 代表
WEB制作に関する技術や役立つ情報を発信していきます。10年にわたるWordPress歴を背景に、幅広いアイデアを形にするお手伝いをしています。