php数组对百万数据进行排除重复数据的实现代码


Posted in PHP onJune 08, 2010

假如得到一个uid列表,数量在百万行以上,格式如下:

10001000 
10001001 
10001002 
...... 
10001000 
...... 
10001111

其实利用php数组的特性,很好进行排重,我们先来看一下php数组的定义:PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。数组元素的值也可以是另一个数组。树形结构和多维数组也是允许的。

在php的数组中,键(keys)也称为索引,具有唯一性,我们正可以利用这一特性进行排重,示例代码如下:

<?php 
//定义一个数组,用于存放排重后的结果 
$result = array(); 
//读取uid列表文件 
$fp = fopen('test.txt', 'r'); while(!feof($fp)) 
{ 
$uid = fgets($fp); 
$uid = trim($uid); 
$uid = trim($uid, "\r"); 
$uid = trim($uid, "\n"); 
if($uid == '') 
{ 
continue; 
} 
//以uid为key去看该值是否存在 
if(empty($result[$uid])) 
{ 
$result[$uid] = 1; 
} 
} 
fclose($fp); 
//将结果保存到文件 
$content = ''; 
foreach($result as $k => $v) 
{ 
$content .= $k."\n"; 
} 
$fp = fopen('result.txt', 'w'); 
fwrite($fp, $content); 
fclose($fp); 
?>

20多行代码,就可以对百万以上的数据进行排重,效率也不错,非常实用。手机号、email,也可以采用这种方式进行排重。

还有,这可方法还可以用于两个文件进行排重的工作,如果你有两个uid列表文件,格式和上面的uid列表一样,示例程序如下:

<?php 
//定义数组,用于存放排重后的结果 
$result = array(); 
//读取第一个uid列表文件,放入$result_1 
$fp = fopen('test_1.txt', 'r'); 
while(!feof($fp)) 
{ 
$uid = fgets($fp); 
$uid = trim($uid); 
$uid = trim($uid, "\r"); 
$uid = trim($uid, "\n"); 
if($uid == '') 
{ 
continue; 
} 
//以uid为key写入$result,如有重复就会覆盖 
$result[$uid] = 1; 
} 
fclose($fp); 
//读取第二个uid列表文件,并进行排重操作 
$fp = fopen('test_2.txt', 'r'); 
while(!feof($fp)) 
{ 
$uid = fgets($fp); 
$uid = trim($uid); 
$uid = trim($uid, "\r"); 
$uid = trim($uid, "\n"); 
if($uid == '') 
{ 
continue; 
} 
//以uid为key去看该值是否存在 
if(empty($result[$uid])) 
{ 
$result[$uid] = 1; 
} 
} 
fclose($fp); 
//$result里保存的就排重以后的结果,可以输出到文件,代码省略 
?>

仔细想想,不难发现,利用数组的这一特性还可以解决我们工作中的更多问题。
PHP 相关文章推荐
php 数组的一个悲剧?
May 11 PHP
php 错误处理经验分享
Oct 11 PHP
php实现文件下载(支持中文文名)
Dec 04 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
Nov 24 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
Dec 17 PHP
php的闭包(Closure)匿名函数详解
Feb 22 PHP
php读取der格式证书乱码解决方法
Jun 22 PHP
深入浅析php中sprintf与printf函数的用法及区别
Jan 08 PHP
基于laravel制作APP接口(API)
Mar 15 PHP
php 防止表单重复提交两种实现方法
Nov 03 PHP
Laravel获取所有的数据库表及结构的方法
Oct 10 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
Feb 18 PHP
腾讯QQ php程序员面试题目整理
Jun 08 #PHP
php 上传文件类型判断函数(避免上传漏洞 )
Jun 08 #PHP
php的字符串用法小结
Jun 08 #PHP
php文章内容分页并生成相应的htm静态页面代码
Jun 07 #PHP
php获取当前网址url并替换参数或网址的方法
Jun 06 #PHP
phpmyadmin里面导入sql语句格式的大量数据的方法
Jun 05 #PHP
php 智能404跳转代码,适合换域名没改变目录的网站
Jun 04 #PHP
You might like
用PHP制作的意见反馈表源码
2007/03/11 PHP
从零开始学YII2框架(六)高级应用程序模板
2014/08/20 PHP
ThinkPHP3.2.3数据库设置新特性
2015/03/05 PHP
Yii扩展组件编写方法实例分析
2015/06/29 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
超清晰的document对象详解
2007/02/27 Javascript
Js点击弹出下拉菜单效果实例
2013/08/12 Javascript
jQuery判断checkbox是否选中的小例子
2013/12/02 Javascript
JavaScript中的toUTCString()方法使用详解
2015/06/12 Javascript
Javascript实现代码折叠功能
2016/08/25 Javascript
了解VUE的render函数的使用
2017/06/08 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
vue.js给动态绑定的radio列表做批量编辑的方法
2018/02/28 Javascript
Koa2微信公众号开发之消息管理
2018/05/16 Javascript
浅谈vue权限管理实现及流程
2020/04/23 Javascript
Python使用minidom读写xml的方法
2015/06/03 Python
Python实现字符串反转的常用方法分析【4种方法】
2017/09/30 Python
利用python爬取斗鱼app中照片方法实例
2017/12/03 Python
对pandas中Series的map函数详解
2018/07/25 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
python3 爬取图片的实例代码
2018/11/06 Python
Django使用AJAX调用自己写的API接口的方法
2019/03/06 Python
在Python IDLE 下调用anaconda中的库教程
2020/03/09 Python
Skyscanner波兰:廉价航班
2017/11/07 全球购物
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
中专毕业生自荐信
2013/11/16 职场文书
土木工程专业个人求职信
2013/12/30 职场文书
教师旷工检讨书
2014/01/18 职场文书
婚礼主持词开场白
2014/03/13 职场文书
老公保证书范文
2014/04/29 职场文书
计算机应用专业毕业生求职信
2014/06/03 职场文书
英文升职感谢信
2015/01/23 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
Python基础之hashlib模块详解
2021/05/06 Python
golang实现一个简单的websocket聊天室功能
2021/10/05 Golang