导入Csv

    /**
     * 导入Csv
     * ThinkPHP5.1框架
     */
    public function csvDr()
    {
        $excelData = array();
        //第一种:将文件一次性全部读出来
//        $content = trim(firle_get_contents('../public/upload/test.csv'));
//        $excelData = explode("\n", $content);
//        array_shift($excelData);

        //第二种:直接使用file
        $excelData = file('../public/upload/test.csv');
        array_shift($excelData);//删除第一行数组(一般都是标题)
        if (empty($excelData)) {
            return false;
            exit();
        }
        $chunkData = array_chunk($excelData, 500);//分割数组 size的数量保持在500-1000,过大会导致数组卡顿
        $count = count($chunkData);//for循环分批插入中使用

        //第一种方法foreach循环分批导入
        $row = array();
        foreach ($chunkData as $item) {
            $data = array();
            foreach ($item as $value) {
                //转码并去除html标签和空字符
                $value = iconv("GBK", "UTF-8//IGNORE", trim(strip_tags($value)));
                $arr = explode(',', $value);//将转好的字符串分割成数组
                $row['id'] = $arr[0];
                $row['name'] = $arr[1];
                $row['city'] = $arr[2];
                $row['phone'] = $arr[3];
                $row['platform'] = $arr[4];
                $row['status'] = $arr[5];
                $row['time'] = $arr[6];
                $row['effect'] = $arr[7];
                $data[] = $row;
            }
            $db = Db::name('seach')->fetchSql()->insertAll($data);
            dump($db);
        }
        //第二种for循环分批插入
//        for ($i = 0; $i < $count; $i++) {
//            $data = array();
//            foreach ($chunkData[$i] as $value) {
//                $value = iconv("GBK", "UTF-8//IGNORE", trim(strip_tags($value)));
//                $arr = explode(',', trim($value));
//                $row['id'] = $arr[0];
//                $row['name'] = $arr[1];
//                $row['city'] = $arr[2];
//                $row['phone'] = $arr[3];
//                $row['platform'] = $arr[4];
//                $row['status'] = $arr[5];
//                $row['time'] = $arr[6];
//                $row['effect'] = $arr[7];
//                $data[] = $row;
//            }
//            $db = Db::name('seach')->fetchSql()->insertAll($data);
//            dump($db);
//        }

    }

导出Csv

/**
 * 数据导出到excel(csv文件)
 * @param $fileName  文件名
 * @param array $tileArray  一维数组
 * @param array $dataArray  二维数组
 */
function export_excel($fileName, $tileArray = [], $dataArray = []) { ini_set('memory_limit', '1024M'); ini_set('max_execution_time', 0); ob_end_clean(); ob_start(); header('Content-Type: text/csv;charset=utf-8'); //header("Content-Disposition:filename=" . $fileName); header("Content-Disposition:attachment;filename=" . $fileName . '.csv'); header('Cache-Control: max-age=0'); header('Pragma:public'); $fp = fopen('php://output', 'a'); //$fp = fopen('php://output', 'w'); fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF));// 转码 防止乱码(比如微信昵称) fputcsv($fp, $tileArray); $index = 0; foreach ($dataArray as $item) { if ($index == 10000) { $index = 0; ob_flush(); flush(); } $index++; fputcsv($fp, $item); unset($item); } unset($dataArray); fclose($fp); ob_flush(); flush(); ob_end_clean(); } 

/**
 * @param $filename 文件名
 * @param array $$titleArray  标题  一维数组
 * @param array $dataArray 内容  二维数组
 */
function export_csv($fileName, array $titleArray, array $dataArray)
{
    //$fileName = iconv('utf-8', 'gb2312', $fileName);//文件名称
    //$fileName = iconv('utf-8', 'gb2312', $fileName) . date('_YmdHis');// 文件名称可根据自己情况设定
    // header函数需要放fopen之前,不然会直接在浏览器页面打印输出。而不是文件下载
    header('Content-Type: application/vnd.ms-excel;charset=utf-8');
    header('Content-Disposition: attachment;filename="' . $fileName . '.csv"');
    header('Cache-Control: max-age=0');
    header('Pragma:public');
    ob_clean();
    ob_start();
    $fp = fopen('php://output', 'a');
    //$fp = fopen('php://output', 'w');
    fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF));//解决乱码
    fputcsv($fp, $titleArray);

    $num = 0;
    $countData = count($dataArray);
    if ($countData <= 10000) {
        $limit = 1000;
    } elseif ($countData > 10000 && $countData <= 30000) {
        $limit = 3000;
    } else {
        $limit = 5000;
    }

    foreach ($dataArray as $value) {
        $num++;
        if ($num == $limit) {
            ob_flush();
            flush();
            $num = 0;
        }
        fputcsv($fp, $value);
        unset($value);
    }
    unset($dataArray);
    fclose($fp);

    ob_flush();
    flush();
    ob_end_clean();

    exit();
}

调用

    /**
     * 调用导出Csv
     * ThinkPHP5.1框架
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function csvDc() { $filename = 'test';//Csv文件名 $header = ['序号', '项目', '城市', '手机', '平台', '状态', '日期', '生效时间'];//标题(一位数组) $data = Db::table('seach')->select();//数据内容(二维数组) export_csv($filename, $header, $data); }

作者:DongQin小迷弟

链接:https://www.jianshu.com/p/e43cd4b934ea

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原文地址:http://www.cnblogs.com/gwhm/p/16787922.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性