PHP简单的去重算法

时间:2011-7-19     作者:smarteng     分类: PHP相关


应用场景:按照某个关键字去掉重复的数据,多用在从数据库里取出某个字段非重复的数据
简单介绍:虽然可以通过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;
    }
}