美文网首页
php利用生成器yield读取较大csv文件

php利用生成器yield读取较大csv文件

作者: 苦涩的羽 | 来源:发表于2019-11-14 21:58 被阅读0次

    生成器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);

        }

    }

    相关文章

      网友评论

          本文标题:php利用生成器yield读取较大csv文件

          本文链接:https://www.haomeiwen.com/subject/odmdictx.html