ThinkPHP5 关于CSV文件的导入与导出

近期的应项目需求,需要用到数据的导入与导出,因为数据比较多,思来想去使用了CSV格式的文件,结合了网上各位大佬的文章,具体代码如下:

在thinkphp/library/think下新建Csv.php文件:

<?php
namespace Think;
class Csv
{//导出csv文件public function put_csv($list,$title){$file_name = "exam".time().".csv";header('Content-Type: application/vnd.ms-excel');header('Content-Disposition: attachment;filename='.$file_name );header('Cache-Control: max-age=0');$file = fopen('php://output',"a");$limit = 1000;$calc = 0;foreach ($title as $v){$tit[] = iconv('UTF-8', 'GB2312//IGNORE',$v);}fputcsv($file,$tit);foreach ($list as $v){$calc++;if($limit == $calc){ob_flush();flush();$calc = 0;}foreach($v as $t){$tarr[] = iconv('UTF-8', 'GB2312//IGNORE',$t);}fputcsv($file,$tarr);unset($tarr);}unset($list);fclose($file);exit();}// csv导入 public function input_csv($csv_file) {  $result_arr = array ();  $i = 0;  while($data_line = fgetcsv($csv_file,10000)) { //10000是表示可以处理多长的字符 if ($i == 0) {  $GLOBALS ['csv_key_name_arr'] = $data_line;  $i ++;  continue;  }      foreach($GLOBALS['csv_key_name_arr'] as $csv_key_num => $csv_key_name ) {  $result_arr[$i][$csv_key_name] = $data_line[$csv_key_num];  }  $i++;  }  return $result_arr;  }  
}
?>

在控制器中调用:

<?php
namespace app\index\controller;
use think\Controller;
use think\Request;
use think\Db;
use think\Paginator;
use think\Validate;
use think\Csv;  //此处是csv文件实现的关键
class Index extends Controller
{public function _initialize(){header("Content-type:text/html;charset=utf-8");}    /** CSV试题导出*/public function downQuestions(){       $condition['qu_status'] = array('gt','-1');$csv = new Csv();  //实例化后才可以调用之前类文件定义好的方法$list = Db::table('gw_questions')->field('qu_name,qu_options,qu_answer,qu_describe,gw_topic.to_name,qu_time,te_name')->join('gw_topic','gw_topic.to_id=gw_questions.to_id')->join('gw_teacher','gw_teacher.te_id=gw_questions.te_id','LEFT')->where($condition)->select();$csv_title = array('题干内容','选项详情','参考答案','答案解析','题型','录入时间','录入人');$csv->put_csv($list,$csv_title);}/** CSV试题导入*/   public function upQuestionsWrite(){// 获取表单上传文件$file = request()->file('examfile');if(empty($file)) {$this->error('请选择上传文件');}// 移动到框架应用根目录/public/uploads/ 目录下$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($handle); // 解析csv  $len_result = count($result);  if($len_result == 0){  $this->error('此文件中没有数据!');}  $data_values = '';  for($i = 1;$i < $len_result+1;$i ++) { // 循环获取各字段值  $arr = array_values($result[$i]);  $qu_name = iconv('gb2312','utf-8',$arr[0] ); // 中文转码  $qu_options = iconv('gb2312','utf-8',$arr[1]);  $qu_answer = $arr[2];  $qu_describe = iconv('gb2312','utf-8',$arr[3]);$to_id = $arr[4]; $te_id = 1; //添加试题的教师           $data_values .= "('$qu_name','$qu_options','$qu_answer','$qu_describe','$to_id','$te_id'),";  }  $data_values = substr($data_values,0,- 1 ); // 去掉最后一个逗号  fclose($handle); // 关闭指针// 批量插入数据表中$result = DB::execute("insert into gw_questions (qu_name,qu_options,qu_answer,qu_describe,to_id,te_id) values $data_values" );if($result){            $this->success('文件上传成功,数据已经导入!','exampaper',3);}else{// 上传失败获取错误信息$this->error($file->getError());}}   
}
?> 

模板页表单(此处我的项目中使用了框架,样式可以按自己的需求修改):

<form action="{:url('index/index/upQuestionsWrite')}" method="post" class="form form-horizontal" enctype="multipart/form-data" id="addform">	<div class="row cl"><label class="form-label col-xs-4 col-sm-2">选择试题文件:</label><div class="btn-upload form-group"><input type="text" name="uploadfile" id="uploadfile" class="input-text upload-url radius" readonly> <a href="javascript:void();" class="btn btn-primary radius"><i class="Hui-iconfont"></i>浏览文件</a><input type="file" name="examfile" class="input-file" multiple>			    </div>    <a class="btn btn-success btn-submit">导入试题</a></div>	
</form>
<script type="text/javascript">
$(function(){     //表单提交时判断是否有文件存在$(".btn-submit").click(function(){if($("input[name='uploadfile']").val() == ''){alert("请选择CSV文件!");return false;}else{$("#addform").submit();}}); 	
});
</script>

注意: fgetcsv() 函数的用法,参考资料 https://www.runoob.com/php/func-filesystem-fgetcsv.html 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/48916.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQLyog Community如何正确导出CSV

第一步&#xff1a;选择导出 弹出Export As界面&#xff0c;将 前端添加列名称 选中&#xff08;不然导出的数据无列名&#xff09; 第二步&#xff1a;点击更改弹出指定转义字符界面&#xff0c;然后按图设置参数即可 注&#xff1a;变量长度->字段被终止&#xff0c;设置…

go实现导出excel或csv文件

go实现导出excel或csv文件 很早之前的一个项目需求要&#xff0c;需要把公司信息列表和漏洞信息列表导出excel文件&#xff0c;没有很高要求&#xff0c;能看就行吧&#xff0c;就做了导出csv的两个接口。 最近看我的CSDN发现好久没有写了&#xff0c;惭愧啊&#xff01;其实遇…

2.2如何从CSV文件中导入数据

2.2 如何从CSV文件中导入数据 1、CSV格式&#xff0c;顾名思义就是指逗号分隔的值&#xff08;文件中还包括一个文件头&#xff0c;也是用逗号分隔&#xff09; 2、从CSV文件中导入数据有一下5个步骤&#xff1a; 打开ch02-data.csv文件。首先读取文件头然后读取剩余行当发生…

免费“白嫖” GPT-4 方法 +1,飙升 GitHub 热榜第二!开发者锐评:跟“偷”有什么区别?...

整理 | 郑丽媛 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 前不久&#xff0c;可“白嫖” GPT-4 的 Forefront Chat 吸引了众多关注&#xff0c;导致该网站一度崩溃&#xff0c;也令不少人发出疑问&#xff1a;“GPT-4 这么贵&#xff0c;为什么它能免费让我们…

雅思两次7.5经验分享~希望帮你冲击雅思高分!

本文首发于我的知乎文章&#xff0c;见链接。 雅思两次7.5经验分享~希望帮你冲击雅思高分&#xff01; - Mr.HenryHuang的文章 - 知乎 https://zhuanlan.zhihu.com/p/163391234 长文预警&#xff0c;可以点赞收藏再看&#xff0c;希望对你们有帮助O(∩_∩)O~ 本文并不能通过一…

雅思写作攻略 - 提高Task 1成绩

雅思写作攻略 - 提高Task 1成绩 Move Up In IELTS - Succeed in IELTS Task 1 Academic Writing &#x1f393;✍️想在IELTS写作考试中取得好成绩吗&#xff1f;这本书《Move Up In IELTS - Succeed in IELTS Task 1 Academic Writing》是你必须拥有的工具&#x1f4da;&…

大数据精准营销应用(一)

文章目录​​​​​​​ 前言 一、精准营销简介 二、大数据精准营销过程 三、大数据精准营销方式 四、项目目标 五、项目流程 六、数据的处理​​​​​​​ 数据的预览 数据的读取 数据的解析 数据预处理 异常值处理 缺失值处理 时间格式和时区转换 量纲转化 重…

最新版本的ChatGPT代码解释器使用指南来了

ChatGPT推出至今最强最有用的功能是什么&#xff1f; 可能要非代码解释器&#xff08;Code Interpreter&#xff09;莫属了。 如果你还无法体验和享受plus带来的极致体验&#xff0c;可以选择共享plus的方式或者自行升级&#xff0c;更多内容访问&#xff1a;链接&#xff1a…

北大斩获ICLR 2023杰出论文奖!清华人大、LeCun获提名

来源&#xff1a;新智元 近日&#xff0c;ICLR公布了2023年的获奖名单&#xff0c;共有4篇获最佳论文奖&#xff0c;5篇获荣誉提名。 其中&#xff0c;来自北京大学的张博航、罗胜杰、王立威、贺笛荣获杰出论文奖&#xff0c;来自清华大学的孔祥哲、刘洋&#xff0c;中国人民大…

什么是技术美术?

前言 技术美术&#xff0c;英文名是Technical Art&#xff0c;简称TA. 说白了就是一群既懂程序又懂美术的人。 至于技术美术是属于程序还是属于美术我们在这里不做过多讨论&#xff0c;要不然会打起来的。。。 反正我认为技术美术就是一名特殊的美术&#xff0c;要不然的话为什…

基于Java+SpringBoot+Vue实现前后端分离美术馆管理系统

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

基于GTSRB数据集的交通标志识别实验(Tensorflow)

基于GTSRB的交通标志识别实验 一、数据数据读取 二、搭建网络三、模型预测四、附录模块导入Code 结语 一、数据 官网下载太慢&#xff0c;然后我找到了一个整理好的数据集 链接: GTSRB-德国交通标志识别图像数据 . 数据集很干净&#xff0c;直接用就好了&#xff0c;它把所有的…

MOOC TensorFlow入门实操课程代码回顾总结(二)

欢迎来到TensorFlow入门实操课程的学习 MOOC TensorFlow入门实操课程代码回顾总结&#xff08;一&#xff09; MOOC TensorFlow入门实操课程代码回顾总结&#xff08;三&#xff09; 注&#xff1a; 用于表示python代码粘贴运行结果 目录 5 图像分类基础应用——猫狗分类案例5…

基于jupyter notebook的python编程-----猫狗数据集的阶段分类得到模型精度并进行数据集优化

基于jupyter notebook的python编程-----猫狗数据集的阶段分类并得到模型精度和后续优化 一、名词解释1、什么是overfit&#xff08;过拟合&#xff09;&#xff1f;2、什么是数据增强&#xff1f;3、什么是猫狗数据集&#xff1f; 二、猫狗数据集下载1、猫狗数据集下载2、数据集…

【动手撸深度学习】深度挖掘AI的图像分类能力!

欢迎来到动手撸深度学习~ cv君力挺的:最值得看的专栏系列:动手撸深度学习, 学习完本系列,你能从调包侠到一个能独立打比赛的朋友周边的神!文章付费,不想让太多人白嫖!!!因为全部原创,珍很贵 !!今天给大家来分享一下调参技巧,看完你会感谢我的~ 今天第一节 介绍如何…

卷积神经网络的猫狗识别

文章目录 一、准备工作二、猫狗识别2.1、下载数据集2.1.1、 图片分类2.1.2、图片数量统计 2.2、卷积神经网络CNN2.2.1、网络模型搭建2.2.2、图像生成器读取文件中数据2.2.3、训练2.2.4、保存模型2.2.5、结果可视化 2.3、对模型进行调整2.3.1、图像增强方法2.3.2、模型调整2.3.3…

Python基于keras训练简单微笑识别

文章目录 一、数据预处理二、训练模型创建模型训练模型训练结果 三、预测效果 四、源代码pretreatment.pytrain.pypredict.py 一、数据预处理 实验数据来自genki4k 提取含有完整人脸的图片 def init_file():num 0bar tqdm(os.listdir(read_path))for file_name in bar:bar…

猫狗识别与分类

猫狗识别与分类 文章目录 猫狗识别与分类一、前言二、环境配置三、源码以及数据集四、基础猫狗识别程序如下1、train.pytrain.py程序结构&#xff1a; 2、detect.pydetect.py程序结构&#xff1a; 五、配置环境过程1、打开Anaconda Prompta、创建一个叫MNIST4的环境b、创建成功…

基于卷积神经网络(CNN)的猫狗识别

目录 引言 1.什么是卷积神经网络&#xff1f; 1.1什么是神经网络&#xff1f; 1.2什么是卷积&#xff1f; 2.准备工作 2.1一些知识&#xff1a; 2.2keras 2.3Conv2D 2.4 MaxPooling2D 3.基于卷积神经网络的猫狗识别 3.1导入必要库 3.2模型定义 3.3实例化模型并训练…

使用卷积神经网络构建图像分类模型检测肺炎

在本篇文章中&#xff0c;我将概述如何使用卷积神经网络构建可靠的图像分类模型&#xff0c;以便从胸部x光图像中检测肺炎的存在。 肺炎是一种常见的感染&#xff0c;它使肺部的气囊发炎&#xff0c;引起呼吸困难和发烧等症状。尽管肺炎并不难治疗&#xff0c;但及时诊断是至关…