LoginSignup
147
168

More than 5 years have passed since last update.

【PHP】CSVファイルの読み込み

Last updated at Posted at 2015-09-10

CSVファイルの読み込み方法はいくつかあるが、PHP5.1以上を使っているならSplFileObject::READ_CSVの一択。fopen+fgetcsvよりスピードが早い。

※SplFileObject::fgetcsvは遅いので注意。

参考:【PHP】その CSV 変換、本当に「fgetcsv」でいいの?

SplFileObject::READ_CSV

csv
foo1,foo2,foo3
bar1,bar2,bar3
php
$file = new SplFileObject($filepath); 
$file->setFlags(SplFileObject::READ_CSV); 
foreach ($file as $line) {
  //終端の空行を除く処理 空行の場合に取れる値は後述
  if(is_null($line[0]){
    $records[] = $line;
  }
} 

var_dump($records);
/*
Array
(
  [0]=>Array
    (
    [0]=>'foo1',
    [1]=>'foo2',
    [2]=>'foo3',
    )
  [1]=>Array
    (
    [0]=>'bar1',
    [1]=>'bar2',
    [2]=>'bar3',
    )
)
*/

空行も読み込む件

読み込み結果を記載する。

  • 改行のみの行
array(1) {
  [0] =>
  NULL
}
  • 半角スペースのみの行
array(1) {
  [0] =>
  string(1) " "
}

fopen+fgetcsv

一応こっちも載せておく。

if (($fp = fopen($filepath, "r")) === false) {
    //エラー処理
}

// CSVの中身がダブルクオーテーションで囲われていない場合に一文字目が化けるのを回避

setlocale(LC_ALL, 'ja_JP');

$i=0;
while (($line = fgetcsv($fp)) !== FALSE) {
    mb_convert_variables('UTF-8', 'sjis-win', $line);
    if($i == 0){
        // タイトル行
        $header = $line;
        $i++;
        continue;
    }

    $data[] = $line;

    $i++;
}

fclose($fp);

参考:PHP5.2でCSVファイル取り込み

147
168
3

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
147
168