LoginSignup
0
5

More than 3 years have passed since last update.

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

Posted at

はじめに

アプリケーションを作成しているとcsvファイルを読み込み、書き込みする場面が多くあると思います。
今回はcsvファイルを読み込み、書き込みする方法を解説します。

今回使用するcsvファイル 祝日のデータ

内閣府が出している祝日のファイルを使って解説します。

中身は下記のような形式です。

syukujitu.csv
1955/1/1,元日
1955/1/15,成人の日
1955/3/21,春分の日
  // :
  // :
2021/10/11,スポーツの日
2021/11/3,文化の日
2021/11/23,勤労感謝の日

csvファイルの読み込み

csvファイルを読み込む方法の大まかな流れは下記の通りです。

  1. csvファイルを開く
  2. csvファイルを読み込む
  3. csvファイルを閉じる

1. csvファイルを開く

まず、csvファイルを読み込むためにファイルを開きます。
使用する関数はfopenです。
この関数の処理に成功するとファイルポインタリソースが返ってきます。
ファイルポインタリソースとはファイルの読み書きに必要な情報(ファイル名、ファイル操作権限、csvファイルの何行目から読むのかなど)です

sample.php
<?php
$filePath = "sample.csv";
$handle = fopen($filePath, "r");

$handleの意味は$filePathのファイルをrモードで開くということです

モードについて

ファイルを開くにも色々な種類があります。
書き込み専用で開く、読み込み専用で開く、書き込みと読み込みできるように開くなどです
4種類について説明します。これだけで基本的な操作はできます

r:読み込みのみで開きます。処理の開始場所はファイルの先頭です。
r+:読み込み/書き出し用に開きます。 処理の開始場所はファイルの先頭です。
a:書き出し用のみで開きます。処理の開始場所はファイルの終端です。 ファイルが存在しない場合には、作成を試みます。
a+:読み込み/書き出し用で開きます。 処理の開始場所はファイルの終端です。 ファイルが存在しない場合には、作成を試みます。

2. csvファイルを読み込む

1で開いた結果を使ってcsvファイルの読み込みを行います
fgetcsv関数を使用します。
下記のコードでcsvファイルを読み込みます。
$handleの情報を元に,区切りのcsvファイルを1000項目まで読み込みます
1000は0にすると無制限に読み込んでくれます。しかし、処理が遅くなるようなので、設定しているのが無難です

sample.php
<?php
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    echo $data[0];
    echo $data[1] . "<br />\n";
}

3. csvファイルを閉じる

読み込みが終わったら、ファイルを閉じます。
使用する関数はfcloseです

sample.php
<?php
fclose($handle);

文字コード

csvファイルはShift_JISで書かれていることが多いので、プログラムで扱うためには文字コードをUTF-8に変換する必要があることが多いです。
文字コードの変換方法は下記の通りです。

sample.php
<?php
//Shift_JISからutf-8に変換
$data[1] = mb_convert_encoding($data[1],"utf-8","sjis");

以上です!!!
ここまで読んでいただきありがとうございました!!
疑問、気になるところがございましたら、質問、コメントよろしくお願いします!!!

0
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
5