Notepad++Good Luck To You!

php利用生成器yield读取体积比较大的csv文件
/*
* 如果对yield生成器不熟悉的话,请阅读《modern php》 第2章
* 如果是excel文件,请现将其转换为csv文件
* 注意文件的编码
*
*/
//生成器
function getRows($file)
{
   if (!file_exists($file)) {
       die("文件不存在");
   }
   $handle = fopen($file, 'r');
   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);
   }

}


«    2023年7月    »
12
3456789
10111213141516
17181920212223
24252627282930
31
TOP 搜索
TOP 控制面板
您好,欢迎到访网站!
  查看权限
TOP 最新留言
    TOP 作者列表
    TOP 站点信息
    • 文章总数:163
    • 页面总数:0
    • 分类总数:6
    • 标签总数:20
    • 评论总数:0
    • 浏览总数:312004
    召唤伊斯特瓦尔