ThinkPHP、php项目csv格式导入,需要的可以略作调整
在创建的ThinkPHP项目中数据导入时,如果数据量比较大,我们就不考虑使用phphexcel导入数据了,因为占内存资源较大,运行速度也慢,这时,csv的导入方式就比较合适。因为采用csv格式导入时,数据自动组合成以逗号分隔的数据,占用资源比较小。需要使用csv格式导入数据时,可在控制器中写入如下import()方法,调用即可实现,仅供参考。EXCEL系统默认,在常规或数值格式下,数字超过10位即以科学计数法显示,对15位以后的数字用0填充。 对于身份证号自动变成科学计数法的地方,正确显示方法: 1、输入数字前先将单元格格式设置为文本。选定单元格,在其上点鼠标右键——“设置单元格格式”,点“数字”标签——“文本”——“确定”。 2、输入数字时先输入一个半角单引号‘。如,"1234567890123456789
/** * csv导入数据 * @param String $ftype 文件类型 * @author cx qq-825844216 */ public function import($ftype = "file") { $voter = new AdminModelVotersModel (); if ($ftype == "image") { $ftype = "jpg,gif,png,jpeg,bmp"; } else if ($ftype == "file") { $ftype = "zip,rar,doc,xls,ppt,csv"; } $setting = array ( "mimes" => "", // 允许上传的文件MiMe类型 "maxSize" => 6 * 1024 * 1024, // 上传的文件大小限制 (0-不做限制) "exts" => $ftype, // 允许上传的文件后缀 "autoSub" => true, // 自动子目录保存文件 "subName" => array ( "date", "Y-m-d" ), // 子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组 // 保存根路径,PUBLIC_PATH需要在配置文件config中定义("PUBLIC_PATH"=>"d:/wamp/www/project/public/" "rootPath" => C("PUBLIC_PATH")."csv/" // "savePath" => , //保存路径 ); /* 调用文件上传组件上传文件 */ // 实例化上传类,传入上面的配置数组 $this->uploader = new Upload ( $setting, "Local" ); $info = $this->uploader->upload ( $_FILES ); // 这里判断是否上传成功 if ($info) { $filename = C("PUBLIC_PATH")."csv/" . $info ["filess"] ["savepath"] . $info ["filess"] ["savename"]; if (empty ( $filename )) { echo "请选择要导入的CSV文件!"; exit (); } $handle = fopen ( $filename, "r" ); $result = $this->input_csv ( $handle ); // 解析csv $len_result = count ( $result ); if ($len_result == 0) { echo "没有任何数据!"; exit (); } $data_values = ""; // array_values($result); for($i = 1; $i < $len_result + 1; $i ++) { // 循环获取各字段值 $rr = array_values ( $result [$i] ); $name = iconv ( "gb2312", "utf-8", $rr [0] ); // 中文转码 $sex = iconv ( "gb2312", "utf-8", $rr [1] ); $phone = $rr [2]; $deptid = $rr [3]; $email = $rr [4]; $data_values .= "("$name","$sex","$phone"),"; } $data_values = substr ( $data_values, 0, - 1 ); // 去掉最后一个逗号 fclose ( $handle ); // 关闭指针 $query = $voter->execute ( "insert into voters (name,sex,phone) values $data_values" ); // 批量插入数据表中 if ($query) { echo "导入成功!"; } else { echo "导入失败!"; } } else { // 输出错误信息 exit ( $this->uploader->getError () ); } } // csv导入 public function input_csv($csv_file) { $result_arr = array (); $i = 0; while ( $data_line = fgetcsv ( $csv_file, 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; }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: jquery遍历数组与筛选数组的方法
- 下一篇: 筛选数组中元素