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下使用以下代码连接并测试
Apr 09 PHP
批量获取memcache值并按key的顺序返回的实现代码
Jun 14 PHP
php代码运行时间查看类代码分享
Aug 06 PHP
php环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
Oct 17 PHP
php在服务器执行exec命令失败的解决方法
Mar 03 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
Jan 14 PHP
php静态文件生成类实例分析
Jan 03 PHP
php中的观察者模式简单实例
Jan 20 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
Dec 31 PHP
PHP中each与list用法分析
Jan 08 PHP
PHP的邮件群发系统phplist配置方法详细总结
Mar 30 PHP
解决微信授权回调页面域名只能设置一个的问题
Dec 11 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使用curl和正则表达式抓取网页数据示例
2014/04/13 PHP
PHP实现支持SSL连接的SMTP邮件发送类
2015/03/05 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
php菜单/评论数据递归分级算法的实现方法
2019/08/01 PHP
JAVASCRIPT 对象的创建与使用
2021/03/09 Javascript
js 事件小结 表格区别
2007/08/13 Javascript
取选中的radio的值
2010/01/11 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
jquery动态改变form属性提交表单
2014/06/03 Javascript
JavaScript插件化开发教程 (四)
2015/01/27 Javascript
javascript格式化日期时间方法汇总
2015/06/19 Javascript
深入理解JS继承和原型链的问题
2016/12/17 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
Angular2环境搭建具体操作步骤(推荐)
2017/08/04 Javascript
node内置调试方法总结
2018/02/22 Javascript
vue 实现的树形菜的实例代码
2018/03/19 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
微信小程序实现随机验证码功能
2018/12/20 Javascript
vue自定义指令用法经典实例小结
2019/03/16 Javascript
微信小程序实现拖拽功能
2019/09/26 Javascript
详解ES6中class的实现原理
2020/10/03 Javascript
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
浅谈Python中的闭包
2015/07/08 Python
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
使用Python搭建虚拟环境的配置方法
2018/02/28 Python
python绘制封闭多边形教程
2020/02/18 Python
opencv 查找连通区域 最大面积实例
2020/06/04 Python
PyCharm上安装Package的实现(以pandas为例)
2020/09/18 Python
matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)
2021/01/10 Python
飞利浦美国官网:Philips美国
2020/02/28 全球购物
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
2013/07/02 面试题
艺术节主持词
2014/04/02 职场文书
预备党员转正材料
2014/12/19 职场文书
爱牙日宣传活动总结
2015/02/05 职场文书
2015年环卫工作总结
2015/04/28 职场文书
vue实现列表拖拽排序的示例代码
2022/04/08 Vue.js