最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
PHP去重进行算法升级过程
时间:2022-06-24 22:44:25 编辑:袖梨 来源:一聚教程网
最近公司在做一个项目,需要对爬取到的数据进行去重,方法就是根据数据的id,去除掉id重复的数据。
下面是这个方法的演化过程。
// 去重
$arr_id = array();
$LeTVFeedList = array();
for ($i = 0; $i < count($arrFeedList); $i++){
if(!in_array($arrFeedList[i]['id'], $arr_id)){
$LeTVFeedList[] = $arrFeedList[i];
$arr_id[] = $arrFeedList[i]['id'];
}
}
从上面的算法中可以看到,上面的算法用了两个数组,两个循环,所以它的时间复杂度为O(n^2),空间复杂度为O(2n)。上面的算法,我们可以从in_array()入手,考虑下面的因素。
用数组的id作数组下标,来存储爬取到的数据值。
// 去重
$tmp_arr = array();
for ($i = 0; $i < min(count($arrFeedList),10); $i++){
$tmp_arr[$arrFeedList[$i]['id']] = $arrFeedList[$i];
}
$arrLeTVFeedList = array();
foreach ($tmp_arr as $key => $value){
$arrLeTVFeedList[] = $value;
}
这里用了两个循环,两个数组,时间复杂度是O(2n),空间复杂度是O(2n).
后来又对循环进行了优化,变成如下代码:
// 去重
$tmp_arr = array();
$arrLeTVFeedList = array();
foreach ($arrFeedList as $key => $value){
if(!isset($tmp_arr[$key['id']])){
$tmp_arr[$key['id']] = $value;
$arrLeTVFeedList[] = $value;
}
}
isset是速度要快于for循环,以上代码是最终版本
相关文章
- 王者荣耀侦探能力大测试攻略 王者荣耀侦探能力大测试怎么过 11-22
- 无期迷途主线前瞻兑换码是什么 11-22
- 原神欧洛伦怎么培养 11-22
- 炉石传说网易云音乐联动怎么玩 11-22
- 永劫无间手游确幸转盘怎么样 11-22
- 无期迷途主线前瞻兑换码是什么 无期迷途主线前瞻直播兑换码介绍 11-22