php实现excel表格数据快速入库

项目场景:大概有一百来份excel表格数据需要整理入库,基础字段一样,如果按照传统的处理方法,需要先整理好数据(数据清洗、合并等),并且按照系统导入模板整理出来,费时费力。

需要解决的问题:

1、每份表的字段位置都不一样;

2、从字符串字段中匹配出手机号;

3、数据去重;

前台录入界面:

录入方法:

    /*** 复制导入** @return string* @throws \think\Exception*/public function import(){$prefix = Config::get('database.prefix');$source = $this->request->param('source');$table = $prefix.'miniform_'.$source;// $project_id = $this->request->param('project_id');if (false === $this->request->isPost()) {$sql = "SELECT COLUMN_NAME AS 'name', COLUMN_COMMENT AS 'title' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'hr_gde_cc' AND TABLE_NAME = 'fa_call_loupan';";$fieldinfo = Db::query($sql);$field = [];foreach ($fieldinfo as $val){if(in_array($val['name'],['id','building','phone'])) continue;$field[$val['name']] = $val['title'];}$this->view->assign('field',$field);// $this->view->assign('tableinfo',$tableinfo);return $this->view->fetch();}$params = $this->request->post('row/a');$field = $this->request->post('field');// Session::set('fieldlast',$field);$data = $this->request->post('data');if (empty($params)) {$this->error(__('Parameter %s can not be empty', ''));}if($data == '' || !strpos($data, "\t")){        // \t是 tab 换行$this->error('导入数据格式不正确!');}$list = explode("\n",$data); // 导入的内容$insertAll = array();                 // 存数据库的数组$field = explode(',',$field);$count = count($list);$exists = $success = $fail = 0;$mustArr['building'] = $params['building'];// 初次处理:排除原始号码phone2为空的数据foreach ($list as $k => $v) {$arr = explode("\t",trim($v));for ($i = 0; $i < count($field); $i++) {$a[$field[$i]] = isset($arr[$i]) ? $arr[$i] : '';}// 判断手机号是否为空if(!$a['phone2']){$fail ++;}else{$a = array_merge($mustArr,$a);$insertAll[] = $a;$success ++;}}// print_r($insertAll);exit;// 根据phone2推导出phoneforeach ($insertAll as &$val){if(preg_match('/^1[3-9]\d{9}$/', $val['phone2'])){$val['phone'] = $val['phone2'];continue;}else{$text = $val['phone2'];// 正则表达式匹配中国大陆手机号preg_match_all('/1\d{10}/', $text, $matches);// print_r($matches); if(isset($matches[0][0])){$val['phone'] = $matches[0][0];}else{$val['phone'] = '';$fail ++;}}}$msg = '共计:'.$count.'条';//号码查重开关if($params['unique_mobile']){// 导入数据本身的号码查重$insertAll = $this->array_unique_by_value($insertAll,'phone');// 查找数据库已存在的手机号$phonelist = $this->model->column('phone');foreach ($insertAll as $key=>$val){if(in_array($val['phone'],$phonelist) || !preg_match('/^1[3-9]\d{9}$/', $val['phone'])){unset($insertAll[$key]);$exists ++;}}$msg .= '共'.$count.'条,重复号码'.$exists.'条,成功导入'.$succes.'条,失败'.$fail.'条';}$result = false;Db::startTrans();try {$result = $this->model->saveAll($insertAll);Db::commit();} catch (ValidateException|PDOException|Exception $e) {Db::rollback();$this->error($e->getMessage());}if ($result === false) {$this->error($msg);}$this->success($msg,null,['ok'=>333]);}// php 数组根据某个值去重protected function array_unique_by_value($array, $key) {$unique = array();foreach ($array as $value) {if (!array_key_exists($key, $value)) {throw new InvalidArgumentException('The provided array does not have the specified key');}if (!array_key_exists($value[$key], $unique)) {$unique[$value[$key]] = $value;}}return array_values($unique);}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【青牛科技】GC5931:工业风扇驱动芯片的卓越替代者

在工业领域&#xff0c;工业风扇的稳定高效运行对于维持良好的生产环境至关重要。而驱动芯片作为工业风扇控制系统的核心元件&#xff0c;其性能直接影响风扇的工作状态。芯麦 GC5931 作为一款新型驱动芯片&#xff0c;在替代 A5931/Allegro 应用于工业风扇中展现出了非凡的优势…

CST案例分析:TLM算法仿真5G毫米波手机天线和整机

5G时代&#xff0c;产品复杂&#xff0c;更新换代快&#xff0c;如何快速仿真不同的设计版本是影响研发效率的关键问题。本期我们用达索系统SIMULIA自己的手机模型来演示5G毫米波的仿真。 &#xff08;图片仅为概念演示&#xff0c;未经达索系统授权不得使用&#xff09; 完整的…

小猿口算炸鱼脚本

目录 写在前面&#xff1a; 一、关于小猿口算&#xff1a; 二、代码逻辑 1.数字识别 2.答题部分 三、代码分享&#xff1a; 补充&#xff1a;软件包下载 写在前面&#xff1a; 最近小猿口算已经被不少大学生攻占&#xff0c;小学生直呼有挂。原本是以为大学生都打着本…

【debug】QT 相关问题error汇总

总结一下碰到过的所有问题error以及解决方案 qt的UI更新之后构建后发现没有变化 取消项目中的Shadow build的勾选&#xff0c;作用是取消影子构建&#xff0c;此后构建目录与源码处于同一目录&#xff0c;每次编译更新程序使用的UI文件error: ‘class QWidget’ has no member…

滑动窗口最大值

239. 滑动窗口最大值 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 …

GEE 案例——利用哨兵-2 图像时间序列和谷歌地球引擎云计算自动绘制和监测香港海洋水质参数

目录 简介 结论 代码 结果 APP链接 引用 简介 对沿海水质的持续监测对于水资源管理和海洋生态系统的可持续性至关重要。 遥感数据&#xff08;如哨兵-2 卫星图像&#xff09;可提供用于时间序列分析的高分辨率观测数据&#xff0c;而基于云的谷歌地球引擎&#xff08;GE…

Redis4:Redis的Java客户端

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

基于Java Web的传智播客crm企业管理系统的设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

【Eclipse系列】eclipse安装与常规配置(含插件)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、下载与安装 二、常规设置 1.1.设置工作空间(workspace) 1.2.设置字体和字体大小 ​编辑 1.3.设置编码 1.4.去除验证(validation) 1.5.去除单词验证(spelli…

抗辐照MCU芯片工艺解析:如何保障芯片的可靠性

行星探索、轨道飞行器任务和空间研究在内的太空项目需要创新的航天器系统技术提供通信与处理功能。随着商业航天的发展&#xff0c;对于航天电子系统需要考虑高可靠与高性能的同时&#xff0c;还需要考虑降低开发成本和缩短上市时间。 以MCU芯片AS32A401为例&#xff0c;该芯片…

qt QKeySequence详解

1、概述 QKeySequence 是 Qt 框架中的一个类&#xff0c;用于表示和处理键盘快捷键序列。它提供了一种方便的方式来解析、存储和比较键盘快捷键&#xff0c;这些快捷键通常用于触发应用程序中的特定操作或命令。QKeySequence 支持多种格式的快捷键表示&#xff0c;包括单个按键…

【RMA】基于知识注入和模糊学习的多模态歧义分析

abstract 多模态情感分析&#xff08;MSA&#xff09;利用互补的多模态特征来预测情感极性&#xff0c;主要涉及语言、视觉和音频三种模态。现有的多模态融合方法主要考虑不同模态的互补性&#xff0c;而忽略了模态之间的冲突所导致的歧义&#xff08;即文本模态预测积极情绪&…

移动取证和 Android 安全

当今的数字时代已经产生了许多技术进步&#xff0c;无论是智能手机还是虚拟现实、人工智能和物联网 (IoT) 等下一代基础技术。 智能手机已不再只是奢侈品&#xff0c;而是我们生存所必需的东西。根据各种统计数据&#xff0c;如今全球有超过 50% 的人使用手机。 由于数据存储…

【Linux】简易版shell

文章目录 shell的基本框架PrintCommandLineGetCommandLineParseCommandLineExecuteCommandInitEnvCheckAndExecBuildCommand代码总览运行效果总结 shell的基本框架 要写一个命令行我们首先要写出基本框架。 打印命令行获取用户输入的命令分析命令执行命令 基本框架的代码&am…

Java 枚举

目录 枚举是什么 常用方法 构造方法 枚举的优缺点 枚举和反射 实现单例模式 枚举是什么 枚举&#xff08;enum&#xff09;&#xff1a;是一种特殊的类&#xff0c;用于定义一组常量&#xff0c;将其组织起来。枚举使得代码更具有可读性和可维护性&#xff0c;特别是在处…

【梯度下降法优化】随机梯度下降、牛顿法、动量法、Nesterov、AdaGrad、RMSprop、Adam

本文理论参考王木头的视频&#xff1a; “随机梯度下降、牛顿法、动量法、Nesterov、AdaGrad、RMSprop、Adam”&#xff0c;打包理解对梯度下降法的优化_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1r64y1s7fU/?spm_id_from333.999.0.0&vd_sourceecbdfcacb078d0…

五个高质量伤感视频素材资源站,帮你快速找到完美创作素材

在制作短视频、MV或者广告时&#xff0c;伤感主题的视频素材往往能触动观众的情感&#xff0c;让作品更具共鸣。无论是表达分手、离别&#xff0c;还是展现孤独与失落&#xff0c;合适的伤感素材对情感类创作至关重要。为帮助创作者找到优质的视频素材&#xff0c;以下推荐5个高…

天正建筑T20V8

链接: https://pan.baidu.com/s/1k-PcXJxHWPh3-6yAIfcaPg提取码: dvyn

JavaScript 实现文本转语音功能

全篇大概2000 字&#xff08;含代码&#xff09;&#xff0c;建议阅读时间10分钟。 引言 我将向大家展示如何使用 JavaScript 和 Web Speech API 快速实现一个“文本转语音”的 Web 应用。通过这个教程&#xff0c;你将了解如何让浏览器将输入的文本朗读出来。 预览效果 一、…

DNS域名详细解析详解

文章目录 DNS域名详细解析详解一、引言二、DNS域名解析过程1、DNS解析概述1.1、DNS解析的基本步骤 2、代码示例 三、DNS查询类型1、递归查询2、迭代查询 四、总结 DNS域名详细解析详解 一、引言 在互联网的世界里&#xff0c;域名和IP地址是两个不可或缺的概念。IP地址是计算…