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);