PHPでCSVを読込、処理したい場合が度々ある。
今までは「fgetcsv」関数や「file」関数を使用して処理していましたが、別の方法を発見。こりゃあ便利。
PHP5.1.0以上の環境では、CSVファイルを読み込むためのSplFileObjectクラスが用意されているらしい。
CSV
data01,data02,data03,data04,data05
data06,data07,data08,data09,data10
data11,data12,data13,data14,data15
SplFileObject
1行ずつ配列で取得できるのでラク。
$file = "sample.csv";
$file = new SplFileObject($file);
$file->setFlags(
\SplFileObject::READ_CSV |
\SplFileObject::READ_AHEAD |
\SplFileObject::SKIP_EMPTY |
\SplFileObject::DROP_NEW_LINE
);
$array = array(); // 配列を用意
foreach ($file as $data) {
error_log(print_r($data, true));
$array[] = $data; // 配列の最後に配列を追加
}
fgetcsv
あんまり大差ない…?
$file = "sample.csv";
$fp = fopen($file, 'r');
$array = array(); // 配列を用意
// fgetcsvでファイルのデータを読み込む
while($data = fgetcsv($fp)){
$array[] = $data;
}
fclose($fp); // 閉じる
実行結果
var_dump($array);
array(3) {
[0]=>
array(5) {
[0]=>
string(9) "data01"
[1]=>
string(6) "data02"
[2]=>
string(6) "data03"
[3]=>
string(6) "data04"
[4]=>
string(6) "data05"
}
[1]=>
array(5) {
[0]=>
string(6) "data06"
[1]=>
string(6) "data07"
[2]=>
string(6) "data08"
[3]=>
string(6) "data09"
[4]=>
string(6) "data10"
}
[2]=>
array(5) {
[0]=>
string(6) "data11"
[1]=>
string(6) "data12"
[2]=>
string(6) "data13"
[3]=>
string(6) "data14"
[4]=>
string(6) "data15"
}
}