CSVファイル読み込み方法

CSVデータを読み込む方法を紹介します。CSVデータを読み込む際、文字コードに注意が必要です。ここでは、PHPの内部エンコーディングとCSVデータの文字コードが「一致する場合」と「一致しない場合」の読み込み例を紹介します。

検証パターン

パターン PHP内部エンコーディング 外部ファイル
1 UTF-8 UTF-8
2 UTF-8 SJIS

ここでは、次のデータを読み込みます。

文字列A,文字列B,文字列C,日付,時刻
あああああ,佐藤,apple,2015/8/21,22:55
いいいいい,鈴木,orange,2015/9/11,11:25
ううううう,高橋,melon,2015/8/17,8:05

CSVデータ読み込み
文字コードが「一致する場合」

PHPの内部エンコーディングとCSVデータの文字コードが「一致する場合」の読み込み例を紹介します。

<?php
 
header("Content-Type: text/html; charset=UTF-8");
 
$filepath = __DIR__ . "/test_utf8.csv";
 
// 読み込みモードでファイルポインタを取得
if (($handle = fopen($filepath, "r")) !== FALSE) {
    // ファイルポインタから行を取得
    while (($line = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $records[] = $line;
    }
    fclose($handle);
}
var_dump($records);
array (size=4)
  0 => 
    array (size=5)
      0 => string '文字列A' (length=10)
      1 => string '文字列B' (length=10)
      2 => string '文字列C' (length=10)
      3 => string '日付' (length=6)
      4 => string '時刻' (length=6)
  1 => 
    array (size=5)
      0 => string 'あああああ' (length=15)
      1 => string '佐藤' (length=6)
      2 => string 'apple' (length=5)
      3 => string '2015/8/21' (length=9)
      4 => string '22:55' (length=5)
  2 => 
    array (size=5)
      0 => string 'いいいいい' (length=15)
      1 => string '鈴木' (length=6)
      2 => string 'orange' (length=6)
      3 => string '2015/9/11' (length=9)
      4 => string '11:25' (length=5)
  3 => 
    array (size=5)
      0 => string 'ううううう' (length=15)
      1 => string '高橋' (length=6)
      2 => string 'melon' (length=5)
      3 => string '2015/8/17' (length=9)
      4 => string '8:05' (length=4)

fgetcsv関数の引数は以下のようになります。

引数 概要
第1引数 ファイルポインタを指定。
第2引数 CSVファイルにある最大行長を指定。
指定しないと最大行長の制限はないが遅くなる。
第3引数 区切り文字を指定。(デフォルト「,」)
第4引数 囲み文字を指定。(デフォルト「"」)

CSVデータ読み込み
文字コードが「一致しない場合」

PHPの内部エンコーディングとCSVデータの文字コードが「一致しない場合」の読み込み例を紹介します。パターン1のソースでSJISのCSVデータを読み込むと次のようにマルチバイト文字が文字化けします。

array (size=4)
  0 => 
    array (size=5)
      0 => string '������A' (length=7)
      1 => string '������B' (length=7)
      2 => string '������C' (length=7)
      3 => string '���t' (length=4)
      4 => string '����' (length=4)
  1 => 
    array (size=5)
      0 => string '����������' (length=10)
      1 => string '����' (length=4)
      2 => string 'apple' (length=5)
      3 => string '2015/8/21' (length=9)
      4 => string '22:55' (length=5)
  2 => 
    array (size=5)
      0 => string '����������' (length=10)
      1 => string '����' (length=4)
      2 => string 'orange' (length=6)
      3 => string '2015/9/11' (length=9)
      4 => string '11:25' (length=5)
  3 => 
    array (size=5)
      0 => string '����������' (length=10)
      1 => string '����' (length=4)
      2 => string 'melon' (length=5)
      3 => string '2015/8/17' (length=9)
      4 => string '8:05' (length=4)

そこで次のようにmb_convert_encodingで文字コードを変換してから読み込んでいきます。

<?php
 
header("Content-Type: text/html; charset=UTF-8");
 
$filepath = __DIR__ . "/test_sjis.csv";
 
// mb_convert_encodingでCSVから取得した文字列をsjisからutf-8に変換
$buf = mb_convert_encoding(file_get_contents($filepath), "utf-8", "sjis");

// tmpfile関数で一時ファイルを作成
$handle = tmpfile();

// $bufの内容を $handleが指しているファイル・ストリームに書き込む
fwrite($handle, $buf);

// $handleのファイル位置指示子を、ファイルストリームの先頭にセット
rewind($handle);
 
while (($line = fgetcsv($handle, 1000, ",")) !== FALSE) {
    $records[] = $line;
}
fclose($handle);
var_dump($records);

これで、パターン1と同じ結果になります。

【エンジニア向け】仕事を見つける方法

転職する

転職エージェントを活用する

転職サイトの場合、自身でサイト上から企業を探す必要があります。 一方「レバテックキャリア」 などの転職エージェントの場合、エージェントが企業を紹介してくれます。エージェントが間に入ることにより、日程調整や、条件交渉などもサポートしてくれます。

転職ドラフトを活用する

転職ドラフト」は、 企業がITエンジニアをドラフトという形で指名するサービスです。年収が最初に提示されるなどのメリットがあります。 ただ、初回登録時にレジュメ作成が必要で、すでにエンジニア経験が豊富にあるエンジニア向けのサービスかと思います。 レジュメ作成が手間ですが、自身のキャリアを見直す機会になり、他の仕事探しにも役立つはずです。

エンジニア転職保証のあるスクールを活用する

ある程度、開発経験のあるかたであれば、独学で必要なスキルを身につけることができるはずです。ただ、別業種からエンジニアに転職したい場合など、1から独学で学ぶのはハードルが高いです。そういった方は、スクールの活用を検討しても良いと思います。 「TechAcademy」は、エンジニア転職保証コースを提供しています。給付金制度の対象講座として認定されているため、金銭面の負担も抑えることができます。

フリーランスとして活動する

レバテックフリーランス」「ITプロパートナーズ」「ギークスジョブ」は、フリーランスエージェントサービスです。 エージェントによって、支払いサイトなど細かい違いはありますが、まずは良い案件を見つけることが重要です。 登録自体は無料なので、複数エージェントに登録して、より多くの案件を紹介してもらうのがおすすめです。

logo
わくわくBank.
技術系の記事を中心に、役に立つと思ったこと、整理したい情報などを掲載しています。