PHPで大きなサイズのcsvを読み込みたいです。
大きなサイズのcsv(200万行ぐらい)を読み込み、必要なデータだけを抽出し、その抽出したデータだけのcsvを新規作成したいと考えています。
PHP
1<?php 2// csvからデータを読み込む 3$data = []; 4if(($handle = fopen("read.csv", "r")) !== FALSE) { 5 while($row = fgetcsv($handle)) { 6 // 条件に合う行だけを抽出 7 if($row[0] == "aaa") { 8 $data[] = $row; 9 } 10 } 11 fclose($handle); 12} 13 14// 抽出したデータを書き出す 15if(($handle = fopen("write.csv", "w")) !== FALSE) { 16 foreach($data as $line){ 17 fputcsv($handle, $line); 18 } 19} 20fclose($handle); 21
csv
1aaa,ぶどう,100 2aaa,ぶどう,100 3aaa,ぶどう,100 4aaa,ぶどう,100 5bbb,みかん,200 6bbb,みかん,200 7aaa,ぶどう,100 8aaa,ぶどう,100 9ccc,りんご,50 10aaa,ぶどう,100
csvの行数が少ない場合は、PHPは想定通りの動きをします。
しかし、行数を増やすと下記のようなエラーがでます。
このように、行数が多いcsvを読み込む場合、どのようにすればエラーにならないでしょうか?
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in C:\xampp\htdocs\php\csv_test\csv_test.php on line 5
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/05 14:04
2020/03/05 14:30