php利用生成器yield讀取較大csv文件

生成器yield真是個好東西,可以每次只讀取文件中一行的內容,不占用寶貴的內存資源

function getRows($file)

{

? ? if(!file_exists($file))

? ? {

? ? ? ? die("文件不存在");

? ? }

? ? $handle = fopen($file, 'rb');

? ? if($handle === false)

? ? {

? ? ? ? throw? new Exception('open file error');

? ? }


? ? while(feof($handle) === false)

? ? {

? ? ? ? yield fgetcsv($handle);

? ? }

? ? fclose($handle);

}

//轉換編碼格式,預防中文亂碼

function convert_arr($arr)

{

? ? return array_map(function($v){

? ? ? ? return mb_convert_encoding($v,'utf-8','gb2312');

? ? }, $arr);

}

foreach(getRows("abc.csv") as $k=>$row)

{

? ? if(is_array($row))

? ? {

? ? ? ? $row = convert_arr($row);

? ? ? ? file_put_contents("a.txt", json_encode($row,JSON_UNESCAPED_UNICODE)."\r\n", FILE_APPEND);

? ? }


}

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容