PHPでcsvを読み込み、配列に格納する方法

PHPにて、csvファイルを読み込んで取得し、配列に変換して格納する方法についてまとめました。

解説にあたって、「csv」フォルダにある「syukujitsu.csv」という、2020年前半の祝日をcsv形式でまとめたファイルを使用します。

2020/1/1,元日
2020/1/13,成人の日
2020/2/11,建国記念の日
2020/2/23,天皇誕生日
2020/2/24,休日
2020/3/20,春分の日
2020/4/29,昭和の日
2020/5/3,憲法記念日
2020/5/4,みどりの日
2020/5/5,こどもの日
2020/5/6,休日

フォルダ・ファイル構成はこちら。

  • csv
    • syukujitsu.csv
  • csv_get.php

PHPでcsvファイルを取得し配列に変換する

file_get_contentsでcsvファイルを変数に格納し、その後改行毎の配列にexplode()で変換します。

参考 PHPのexplodeで文字列を配列に変換する方法

変換した配列をforeachの繰り返し処理で、同じくexplode()でカンマ区切りの配列に変換します。

参考 PHPのforeachを徹底解説【サンプルコード有】

//ファイルを変数に入れる
$csv_file = file_get_contents('csv/syukujitsu.csv');

//変数を改行毎の配列に変換
$aryHoge = explode("\n", $csv_file);

$aryCsv = [];
foreach($aryHoge as $key => $value){
    //if($key == 0) continue; 1行目が見出しなど、取得したくない場合
    if(!$value) continue; //空白行が含まれていたら除外
    $aryCsv[] = explode(",", $value);
}

$aryCsvをprint_rで確認してみると、しっかりとcsvファイルが配列となっていることが分かります。

サンプルコード
print_r($aryCsv);
Array
(
    [0] => Array
        (
            [0] => 2020/1/1
            [1] => 元日
        )

    [1] => Array
        (
            [0] => 2020/1/13
            [1] => 成人の日
        )

    [2] => Array
        (
            [0] => 2020/2/11
            [1] => 建国記念の日
        )

    [3] => Array
        (
            [0] => 2020/2/23
            [1] => 天皇誕生日
        )

    [4] => Array
        (
            [0] => 2020/2/24
            [1] => 休日
        )

    [5] => Array
        (
            [0] => 2020/3/20
            [1] => 春分の日
        )

    [6] => Array
        (
            [0] => 2020/4/29
            [1] => 昭和の日
        )

    [7] => Array
        (
            [0] => 2020/5/3
            [1] => 憲法記念日
        )

    [8] => Array
        (
            [0] => 2020/5/4
            [1] => みどりの日
        )

    [9] => Array
        (
            [0] => 2020/5/5
            [1] => こどもの日
        )

    [10] => Array
        (
            [0] => 2020/5/6
            [1] => 休日
        )

)

取得したcsv配列をテーブルで表示させる

csvから変換した配列を、テーブルレイアウトに合わせて表示させる方法です。

<table>
<tr>
    <th>日付</th>
    <th>祝日名</th>
</tr>
<?php foreach($aryCsv as $value){ ?>
<tr>
    <td><?php echo $value[0] ?></td>
    <td><?php echo $value[1] ?></td>
</tr>
<?php } ?>
</table>

実際に実行すると、しっかりテーブルレイアウトとして表示されていることが分かります。

日付 祝日名
2020/1/1 元日
2020/1/13 成人の日
2020/2/11 建国記念の日
2020/2/23 天皇誕生日
2020/2/24 休日
2020/3/20 春分の日
2020/4/29 昭和の日
2020/5/3 憲法記念日
2020/5/4 みどりの日
2020/5/5 こどもの日
2020/5/6 休日

csv区切りの数によって、thとtdの行を増やしたりして対応してください。

以上、PHPでcsvを読み込み、配列に格納する方法、でした。

PHP