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 相关文章推荐
模拟xcopy的函数
Oct 09 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
Mar 24 PHP
php学习之数据类型之间的转换介绍
Jun 09 PHP
解析php类的注册与自动加载
Jul 05 PHP
php下拉选项的批量操作的实现代码
Oct 14 PHP
如何让CI框架支持service层
Oct 29 PHP
PHP扩展程序实现守护进程
Apr 16 PHP
织梦sitemap地图实时推送给百度的教程
Aug 03 PHP
php实现处理输入转义字符的代码
Nov 08 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
Mar 18 PHP
php基于 swoole 实现的异步处理任务功能示例
Aug 13 PHP
使用Git实现Laravel项目的自动化部署
Nov 24 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
打造计数器DIY三步曲(中)
2006/10/09 PHP
服务器上配置PHP运行环境教程
2015/02/12 PHP
深入理解PHP之源码目录结构与功能说明
2016/06/01 PHP
JS操作select下拉框动态变动(创建/删除/获取)
2013/06/02 Javascript
jquery scroll()区分横向纵向滚动条的方法
2014/04/04 Javascript
JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
2014/08/16 Javascript
jQuery的context属性用法实例
2014/12/27 Javascript
js获取html的span标签的值方法(超简单)
2016/07/26 Javascript
jquery实现input框获取焦点的方法
2017/02/06 Javascript
jQuery输入框密码的显示隐藏【代码分享】
2017/04/29 jQuery
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
微信小程序学习笔记之目录结构、基本配置图文详解
2019/03/28 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
vue图片裁剪插件vue-cropper使用方法详解
2020/12/16 Vue.js
vue使用过滤器格式化日期
2021/01/20 Vue.js
Python获取系统默认字符编码的方法
2015/06/04 Python
Python 登录网站详解及实例
2017/04/11 Python
CentOS下使用yum安装python-pip失败的完美解决方法
2017/08/16 Python
全面分析Python的优点和缺点
2018/02/07 Python
selenium+python自动化测试环境搭建步骤
2019/06/03 Python
解决pycharm上的jupyter notebook端口被占用问题
2019/12/17 Python
Pytorch: 自定义网络层实例
2020/01/07 Python
AUC计算方法与Python实现代码
2020/02/28 Python
细说CSS3中box属性中的overflow-x属性和overflow-y属性值的效果
2014/07/21 HTML / CSS
巴西图书和电子产品购物网站:Saraiva
2017/06/07 全球购物
精细化工应届生求职信
2013/11/17 职场文书
学校采购员岗位职责
2014/01/02 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
企业宣传语大全
2015/07/13 职场文书
导游词之沈阳清昭陵
2019/12/28 职场文书
PHP 技巧 * SVG 保存为图片(分享图生成)
2021/04/02 PHP
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python
PO模式在selenium自动化测试框架的优势
2022/03/20 Python
MySql按时,天,周,月进行数据统计
2022/08/14 MySQL