0

0

php实现班级通信录导入重复数据_php去重导入处理方法【技巧】

雪夜

雪夜

发布时间:2026-01-25 18:55:10

|

372人浏览过

|

来源于php中文网

原创

fgetcsv读取Excel导出的CSV时因UTF-8 BOM未自动剥离导致去重失效,需用ltrim($line, "\xEF\xBB\xBF")预处理;同时应清洗零宽字符、使用事务保证原子性,并借助ON DUPLICATE KEY UPDATE高效处理重复。

php实现班级通信录导入重复数据_php去重导入处理方法【技巧】

为什么 fgetcsv 读取 Excel 导出的 CSV 会多出 BOM 头导致去重失效

很多班级通信录是老师用 Excel 编辑后另存为 CSV 的,这类文件开头常带 UTF-8 BOM(\xEF\xBB\xBF),但 fgetcsv 不自动剥离。结果同样是“张三”,一条是 "张三",另一条是 "\xEF\xBB\xBF张三",用 array_unique 或数据库 UNIQUE 都判为不同。

实操建议:

立即学习PHP免费学习笔记(深入)”;

  • 读取每行前先用 ltrim($line, "\xEF\xBB\xBF") 去 BOM,别只依赖 mb_convert_encoding
  • hexdump -C file.csv | head -n1 检查原始文件是否含 BOM(开头出现 ef bb bf
  • 如果用 str_getcsv 处理单行,也要对字段逐个 trim() + ltrim(..., "\xEF\xBB\xBF")

INSERT ... ON DUPLICATE KEY UPDATE 还是先 SELECT 再判断

班级通信录导入常见主键是学号或手机号,设为 UNIQUE 后,直接走 MySQL 的冲突处理比 PHP 层查再插快得多,尤其批量超 50 条时。

实操建议:

立即学习PHP免费学习笔记(深入)”;

  • 建表时给 student_idphoneUNIQUE 索引,否则 ON DUPLICATE KEY 不生效
  • SQL 示例:INSERT INTO class_contact (student_id, name, phone) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE name=VALUES(name), phone=VALUES(phone)
  • 避免用 REPLACE INTO:它本质是删+插,会引发自增 ID 跳变、触发器重复执行
  • 如果要记录“本次跳过几条重复数据”,可在 PHP 中捕获 mysqli_affected_rows() 返回值:0 表示冲突更新(即原记录存在),1 表示新插入

PHP 数组去重时,array_unique 默认不比较中文字段?

array_unique 默认用 string 比较,对 UTF-8 中文没问题,但前提是所有字段已统一编码且无不可见字符(如全角空格、零宽空格)。班级名单里常混入从微信复制的姓名,带 \xE2\x80\x8B(Zero Width Space)。

Mulan AI
Mulan AI

画布式AI视频创作平台,轻松制作爆款视频

下载

实操建议:

立即学习PHP免费学习笔记(深入)”;

  • 清洗字段时加一步:preg_replace('/[\x{200B}-\x{200D}\x{FEFF}]/u', '', $str)(移除常见零宽字符)
  • array_unique($data, SORT_REGULAR),别用 SORT_STRING(后者会强制转字符串,可能把数字学号变成字符串再比,影响逻辑)
  • 调试时用 bin2hex($name) 看实际字节,比肉眼判断更可靠

导入中途失败,怎么保证已入库数据不残留“半条记录”

班级通信录常含多个关联字段(如学生、班级、家长电话),如果用单条 INSERT 循环,某条因手机号格式错误中断,前面成功的就留在库中,下次重跑又重复——这不是去重问题,是事务缺失。

实操建议:

立即学习PHP免费学习笔记(深入)”;

  • 整个导入过程包在 mysqli_begin_transaction() + try/catch 里,失败则 rollback()
  • 不要在循环里逐条 commit,等全部验证通过再 commit()
  • 若必须分批(比如 500 条一批),每批独立事务,并记录最后成功导入的 student_id 到临时表,供断点续传用

真正麻烦的不是重复本身,而是“看起来去重了,其实因编码/空白/事务问题漏掉了某些重复场景”。每次上线前,拿含 BOM、带零宽空格、手机号中间有空格的测试文件跑一遍,比写十遍逻辑更管用。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2882

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1704

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1560

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

1078

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1525

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1277

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1649

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1309

2023.11.13

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

45

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.9万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 810人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号