关于csv文件格式的导出导入个人见解

先上代码:

<?php
namespace think; class Csv
{
/**
* 导出csv文件
* @param $list 数据源
* @param $title 数据列表
*/
public function put_csv($list,$title)
{
$file_name = "exam".time().".csv";//文件名
header('Content-Type: application/vnd.ms-excel');//设置内容类型为Excel
header('Content-Disposition: attachment;filename='.$file_name );//下载文件
header('Cache-Control: max-age=0');//表示当访问此网页后的0秒内再次访问不会去服务器
$file = fopen('php://output',"a");//打开文件或者 URL, php://output 是一个只写的数据流, 允许你以 print 和 echo 一样的方式 写入到输出缓冲区, a:写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
$limit = ;
$calc = ;
foreach ($title as $v){
$tit[] = iconv('UTF-8', 'GB2312//IGNORE',$v);//转码
}
fputcsv($file,$tit);//将行格式化为 CSV 并写入一个打开的文件中。(标题)
foreach ($list as $v){
$calc++;
//-------核心!!!清空缓存,将缓存上的数据写入到文件--------
if($limit == $calc){
ob_flush();//将本来存在输出缓存中的内容取出来,调用ob_flush()之后缓冲区内容将被丢弃。
flush(); //待输出的内容立即发送。 具体查看:https://www.jb51.net/article/37822.htm
$calc = ;
}//-------核心--------
foreach($v as $t){
$tarr[] = iconv('UTF-8', 'GB2312//IGNORE',$t);
}
fputcsv($file,$tarr);//将行格式化为 CSV 并写入一个打开的文件中。(内容)
unset($tarr);//销毁指定的变量
}
unset($list);//销毁指定的变量
fclose($file);//关闭打开的文件
exit();
} // csv导入,此格式每次最多可以处理1000条数据(我觉得这个是不对的,他规定的是读取一行的最大长度)
//$filename 文件路径
public function input_csv($filename) {
$csv_file = $handle = fopen($filename,'r');//只读方式打开,将文件指针指向文件头]
$result_arr = array ();
$i = ;
//函数从文件指针中读入一行并解析 CSV 字段(一维数组)
while($data_line = fgetcsv($csv_file,)) {
//跳过第一行标题读取
if ($i == ) {
$GLOBALS ['csv_key_name_arr'] = $data_line;//将标题存储起来
$i ++;
continue;
}
//读取内容
foreach($GLOBALS['csv_key_name_arr'] as $csv_key_num => $csv_key_name ) {
$csv_key_name = iconv('gb2312','utf-8', $csv_key_name);//标题
if(empty($data_line[$csv_key_num])) {
$result_arr[$i][$csv_key_name] = '';
}else {
$value = iconv('gb2312','utf-8', $data_line[$csv_key_num]);//标题对应的内容
$result_arr[$i][$csv_key_name] = $value;
}
}
$i++;
}
fclose($handle); // 关闭指针
return $result_arr;
}
}

控制器的使用:

    /**
* 大数据改 导出
*/
public function excelOut2()
{// 不限制脚本执行时间以确保导出完成
// set_time_limit(0); $data = db('receive') -> where($where) -> order('create_time desc')-> select();
$csv_title = array('订单编号','客户姓名','客户联电','身份证号码','收货地址','发展渠道编码','订单日期','总部商城号码','是否开户','备注','用户标识','开户号码','卡号','套餐','运单号','签收时间','签收状态','异常标记','入网时间','首充时间','首充金额','发展渠道','对应区分','发展人电话','兑换码','订单类型','发货人','发货日期','异常原因','异常转化情况','异常操作员工','异常操作时间','店铺','登记时间');
//csv导出
$csv = new Csv(); //实例化后才可以调用之前类文件定义好的方法
$csv->put_csv($data, $csv_title);
} /**
* 大数据改 导入
*/
public function excelIn3()
{
if (request() -> isPost())
{
// 获取表单上传文件
$file = request()->file('examfile');
if(empty($file)) {
$this->error('请选择上传文件');
}
$info = $file->move(ROOT_PATH.'public'.DS.'upload');
//获取文件(日期/文件),$info->getFilename();
$filename = ROOT_PATH.'public'.DS.'upload/'.$info->getSaveName();
// $handle = fopen($filename,'r');//只读方式打开,将文件指针指向文件头]
$csv = new Csv();
$result = $csv->input_csv($filename); // 解析csv
$len_result = count($result);//返回数目
if($len_result == ){
$this->error('此文件中没有数据!');
}
// fclose($handle); // 关闭指针
dump($result);
return ;
} return $this -> fetch();
}

有什么不对的欢迎提出建议。

thinkphp5 csv格式导入导出(多数据处理)的更多相关文章

  1. CSV文件导入导出MySQL

    使用SQLyog 工具导入文件数据到MySQL: Excel文件导入导出: 需要驱动:Microsoft Office 2007驱动 导入需要注意的问题:1.Excel里数值列,默认导入会变成浮点型. ...

  2. Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解

    1.简介 本文主要给大家介绍了关于Laravel 5用Laravel Excel实现Excel/CSV文件导入导出的相关内容,下面话不多说了,来一起看看详细的介绍吧. Laravel Excel 在 ...

  3. 完整代码:安卓小软件“CSV联系人导入导出工具”

    完整代码:安卓小软件"CSV联系人导入导出工具" 开发了一个安卓小软件"CSV联系人导入导出工具",欢迎测试.本软件可以帮你快速备份和恢复联系人,不用担心号码遗 ...

  4. 开发了一个安卓小软件“CSV联系人导入导出工具”,欢迎测试

    开发了一个安卓小软件"CSV联系人导入导出工具",欢迎测试.本软件可以帮你快速备份和恢复联系人,不用担心号码遗失,软件操作简单,使用方便. 下载地址: 百度网盘:https://p ...

  5. Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能

    1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和导出. 该 ...

  6. MySql csv文件导入导出

    一.导出到csv(本地导出) 通过mysql客户端shell连接到服务器,选择使用的数据库,输入sql代码: select * from test_info into outfile '/tmp/te ...

  7. 在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能

    1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel ,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和 导出  ...

  8. thinkphp5 使用PHPExcel 导入导出

    首先下载PHPExcel类.网上很多,自行下载. 然后把文件放到vendor文件里面. 一般引用vendor里面的类或者插件用vendor(); 里面加载的就是vendor文件,然后想要加载哪个文件, ...

  9. [PL/SQL]使用PL/SQL实现ORACLE的Excel格式导入导出

    注:教程所使用的PL/SQL Developer版本为10版本 1.oracle导出excel格式 第一步,在pl/sql窗口查询出你想要导出的数据. 第二步,选择你想导出的数据,然后右键" ...

随机推荐

  1. AQS源码解析

    文大篇幅引用自HongJie大佬的一行一行源码分析清楚AbstractQueuedSynchronizer,这只是一篇简单的个人整理思路和总结(倒垃圾),如果觉得有些难懂的话,不要犹豫也不要疑惑,很明 ...

  2. Python第三方包之离线安装

    Python第三方包之离线安装 第一步 首先我们得从pypi上先下载要装的第三方包 https://pypi.org/ 第二步(因为下载下来的包可能需要其他包的依赖,那我们依旧要按照第一步再次下载) ...

  3. E - E CodeForces - 1100E(拓扑排序 + 二分)

    E - E CodeForces - 1100E 一个n个节点的有向图,节点标号从1到n,存在m条单向边.每条单向边有一个权值,代表翻转其方向所需的代价.求使图变成无环图,其中翻转的最大边权值最小的方 ...

  4. C/C++知识总结 一 C/C++常识概述

    C/C++常识概述 程序与计算机语言 C/C++简介与发展 C/C++异同 C/C++编译特点 学习编程建议 程序与计算机语言 程序:是一组计算机能识别和执行.预先编好的一些指令操作合集. 计算机语言 ...

  5. (C++ Error: Incompatible types in assignment of ‘char*’ to ‘char [2])

    in C++, cannot assign a pointer to an array. c++中char*与char[]不是一种类型,但是在C里面可以,所以尽量使用C++中的类,如string, v ...

  6. 使用 Spring data redis 结合 Spring cache 缓存数据配置

    使用 JavaConfig 方式配置 依赖 jar 包: jedis.spring-data-redis 首先需要进行 Redis 相关配置 @Configuration public class R ...

  7. php人民币小写转大写函数,不限长度,精确到分

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://ustb80.blog.51cto.com/6139482/1035327 在打印 ...

  8. MES Auto Logout

    如果您在车间使用MES,可能存在这种情况有人在仍然登录的情况下偶尔离开终端.如果一段时间不使用终端,我们是否可以让用户自动注销. 1 首先,我们有一条using语句: using System.Run ...

  9. 对Web语义化的思考。

    很有意思的HTML语义化 在昨天和做SEO的同学聊了一会儿,当然我没有学会搜索引擎优化的技巧和知识,但在此之前一直对HTML5中header.footer.sidebar.article等标签嗤之以鼻 ...

  10. ubuntu18.04配置宽带上网

    1.将 /etc/NetworkManager 目录下的 managed标签改为true 2.将 /etc/network/ 目录下的 interfaces文件只留下前两行: auto lo ifac ...