PHPでCSVファイルを読み込む際の速度比較

技術
技術

PHPでcsvファイルを読み込む際の選択肢として「fgetcsv」「str_getcsv」「SplFileObject」などの関数があります。それぞれの実行速度を比較したメモ書きです。

計測には「住所.jp」さんのcsvデータを使用しました。(約15万行,22MB)

fgetcsv

「php csv」とかで検索するとたくさん出てくるのがコレ。

$time_start = microtime(true);

$file = fopen("zenkoku.csv","r");

while( ($line = fgetcsv($file) ) !== false){
    $array[] = $line;
}

fclose("zenkoku.csv");

$time = microtime(true) - $time_start;
echo $time."秒";
結果:1.715秒

str_getcsv

PHPバージョン5.3.0以上でのみ使用可能
指定文字でパースすることができます。

$time_start = microtime(true);

$file = str_getcsv(file_get_contents("zenkoku.csv"), "\r\n");

foreach ($file as $line){
    $array[] = str_getcsv($line);
}

$time = microtime(true) - $time_start;
echo $time."秒";
結果:2.148秒

SplFileObject

ファイル読み込み用のオブジェクト指向インターフェイス

$time_start = microtime(true);

$file = new SplFileObject("zenkoku.csv");
$file->setFlags(SplFileObject::READ_CSV);

foreach ($file as $line){
    $array[] = $line;
}

$time = microtime(true) - $time_start;
echo $time."秒";
結果:1.385秒

まとめ

PHPでcsvファイルを読み込むなら「SplFileObject」がおすすめ

 

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

タイトルとURLをコピーしました