如何利用php数组对百万数据进行排重
在平时的工作中经常接到要对网站的会员进行站内信手机短信email进行群发信息的通知用户列表一般由别的同事提供当中难免会有重复为了避免重复发送所以我在进行发送信息前要对他们提供的用户列表进行排重下面我以uid列表来讲讲我是如何利用php数组进行排重的
假如得到一个uid列表数量在百万行以上格式如下
其实利用php数组的特性很好进行排重我们先来看一下php数组的定义PHP 中的数组实际上是一个有序映射映射是一种把 values 关联到 keys 的类型此类型在很多方面做了优化因此可以把它当成真正的数组或列表(向量)散列表(是映射的一种实现)字典集合栈队列以及更多可能性数组元素的值也可以是另一个数组树形结构和多维数组也是允许的
在php的数组中键(keys)也称为索引具有唯一性我们正可以利用这一特性进行排重示例代码如下
<?php//定义一个数组用于存放排重后的结果$result = array();//读取uid列表文件$fp = fopen(testtxt 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] = ; }}fclose($fp);//将结果保存到文件$content = ;foreach($result as $k => $v){ $content = $k"n";}$fp = fopen(resulttxt w);fwrite($fp $content);fclose($fp);?>
多行代码
就可以对百万以上的数据进行排重
效率也不错
非常实用
手机号
email
也可以采用这种方式进行排重
还有这可方法还可以用于两个文件进行排重的工作如果你有两个uid列表文件格式和上面的uid列表一样示例程序如下
<?php//定义数组用于存放排重后的结果$result = array();//读取第一个uid列表文件放入$result_$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写入$result如有重复就会覆盖 $result[$uid] = ;}fclose($fp);//读取第二个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] = ; }}fclose($fp);//$result里保存的就排重以后的结果可以输出到文件代码省略?>
仔细想想不难发现利用数组的这一特性还可以解决我们工作中的更多问题