問題 × 解決策

PHPでCSVファイルを読み込む方法

  • 2020年01月15日
  • PHP

問題

PHPでcsvファイルを読み込んで、自由なフォーマットで表示させたい。

解決策

「fopen」関数、「fclose」関数、「fgetcsv」関数を使用し、配列に格納して出力する。

 

PHPでのCSVファイルの読み込み

PHPでCSVファイルを読み込むには、「fopen」関数でCSVファイルを開き、「fgetscsv」関数でデータを取得して配列に格納し、一通りデータの参照が終えたら「fclose」関数でCSVファイルを閉じます。

CSVファイルの内訳の構成パターンは、1行目に各項目、2行目以降に行ごとでアイテム(内容)を想定しています。

CSVファイルの内容を配列に格納

CSVファイルを読み込み、データを配列に格納します。

<?php 
setlocale(LC_ALL, 'ja_JP.UTF-8');
ini_set('auto_detect_line_endings', 1);
$row = 1;      
$col = 1;
$itemlist = array(); // 項目情報用
$valuelist = array(); // 内容情報用
// ファイルが存在しているかチェックする
if (($handle = fopen("ファイルパス.datacsv", "r")) !== FALSE) {
	// 1行ずつfgetcsv()関数を使って読み込む
	while (($data = fgetcsv($handle,10000))) {
		$col = 1;
		foreach ($data as $value) {
			$value = mb_convert_encoding($value, 'UTF-8', 'sjis-win');
			if($row !== 1){
				// 2行目以降ならば、項目情報用の配列の値を連想配列のキーとして、内容情報用の配列に格納
				$valuelist[$row-1][$itemlist[$col-1]] = $value;
			}else{
				// 最初の行ならば、項目情報用の配列に値を格納
				$itemlist[$col-1] = $value;
			}
			$col++;
		}
		$row++;
	}
	fclose($handle);
}
?>

データ格納用の配列として、

  1. 項目情報用
  2. セル情報用

の2つの配列を用意します。

データを格納していく流れ

  • 「fopen」関数でCSVファイルの読み込み

「fgetcsv」関数でCSVファイル内のデータを一行ずつ処理

取得した1行分のデータを「foreach」でループ処理

  • 最初の行の場合、項目情報用の配列にデータを格納
  • 2行目以降の場合、項目情報用の配列の値を連想配列のキーとして、内容情報用の配列に格納
  • 全ての読み込みが終わったら「fclose」関数でCSVファイルを閉じる。

データを格納し終えた2つの配列を使い、出力を行う。

格納した配列データを元に、出力を行います。

<section class="section">
	<?php
	foreach($valuelist as $row):
	?>
	<div id="row<?php echo $row["id"]; ?>" class="section-s">
		<h3 class="subtitles"><?php echo $row["項目①"]; ?></h3>
		<dl class="dl-list clearfix">
			<dt>項目②</dt>
			<dd><?php echo $row["項目②"]; ?></dd>
			<dt>項目③</dt>
			<dd><?php echo $row["項目③"]; ?></dd>
			<dt>項目④</dt>
			<dd><?php echo $row["項目④"]; ?></dd>
			<dt>項目⑤</dt>
			<dd><?php echo $row["項目⑤"]; ?></dd>
		</dl>
	</div>
	<?php endforeach; ?>
</section>

データを出力していく流れ

セル情報を「foreach」で繰り返し処理

  • $row[‘各項目名’]として、項目の順番を気にせずに出力が可能なので、適宜好きな形にマークアップを行う。

参考ページ

【[PHP]文字化けせずにCSVファイルを読み込み、配列に変換する | PHP Archive】
https://php-archive.net/php/csv-tsv-array/

【fgetcsv関数を利用してCSVファイルを読み込む】
https://noumenon-th.net/programming/2016/05/14/fgetcsv/

コメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

14 − eight =

「問題 × 解決策」
月別アーカイブ一覧

「問題 × 解決策」
月別アーカイブ一覧