ThinkPHP、php项目csv格式导入,需要的可以略作调整

来源:互联网 发布:李选民淘宝上卖的真吗 编辑:程序博客网 时间:2024/05/01 18:30
    在创建的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 \Admin\Model\VotersModel ();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;}



0 1
原创粉丝点击