【精英博主】简单的去重算法!
时间:2011-07-14
来源:互联网
应用场景:按照某个关键字去掉重复的数据,多用在从数据库里取出某个字段非重复的数据
简单介绍:虽然可以通过SQL语句的GROUP BY以及distinct来达到去重的效果,但是效率却非常低下,下面我来说说简单的用程序来去重的方法
算法描述:
1:确定要从数据库里(或者其他存储中,比如变量比如cache)取出的数据的数量,假设为N
2:为了方便去掉重复后返回的数据量还为N,请在N的基础上根据重复度增加M调数据,这样需要从数据库里取出的数据为N+M条记录
3:遍历取出来的所有记录,维护一个已存在的非重复字段的数组
4:每次遍历的时候去查看该数据是否存在在非重复字段数组中,不存在则是你想要的数据,并更新非重复字段数组,存在则跳过。
5:当得到的有效数据条数达到N的时候则结束遍历
实例函数:
<?php
/**
* 去重算法
* @param array $arr 要操作的二维数组
* @param string $key 参数2,要去重的key
* @return int $nums 返回的数据条数
*/
function dedup($arr,$key,$nums){
if(is_array($arr)){
$arrTmp=array();//用来存放已经存在的key值
$i=0;//用来计算多少非重复的数据
foreach($arr as $v){
if(is_array($v)){
if(!in_array($v[$k],$arrTmp)){
$i++;
$arrTmp[]=$v[$k];
$list[]=$v;
if($i==$nums){
break;
}
}
}else{
return false;
}
}
return $list;
}else{
return false;
}
}
作者: 纳美人 发布时间: 2011-07-14

作者: liuxingyuyuni 发布时间: 2011-07-14
在分页显示(上万页或更多)时, 按我的习惯, 肯定会把工作交给数据库, 只返回当前页需要显示的N条记录, 而绝不会把全部记录交给程序处理. 若返回一个庞大的记录集并使用楼主的方法来过滤, 此时程序的任务会不会太重了点?
我的观点是, 这依赖于网站的规模. 如果数据库运行比较轻松, 还是交给数据库吧, 至少可以控制代码的可读性及程序的内存占用率.
另外我并没有深入比较过内存占用方面的优劣. PHP处理一个大记录集会占用大量内存和处理器时间, 数据库在处理时同样也要占用, 不知道是否有人量化并比较过.
实话说我还是倾向于使用数据库, 因为我感觉在内存方面, 数据库无论如果是要占用的, 所以并不会额外增加多少压力; 相反对于PHP来说, 每一次都是一项全新的繁重的任务. 想象一下在客户端连续不停的翻页吧, 此时把工作交给数据库, 它一定会表示"没有鸭梨", 因为它有海量缓存.
个人以为如此, 欢迎指正.
作者: sztime 发布时间: 2011-07-14
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28