php批量排重、批量查询判断

近期重写业务代码,其中需要实现批量从数据库排重并返回结果的功能,现记录如下

功能描述

实现批量排重idfa

一、接口接收拼接的idfa字符串,如:

5F939450-81F1-42F8-909C-CD81546D2440, 8BD233C2-45CD-4E31-987E-C395ADBB77D0, 6AB0690E-00EF-4F7E-B46F-2A59467AA0E8

二、接口返回json数据,如:

{"5F939450-81F1-42F8-909C-CD81546D2440":0,"8BD233C2-45CD-4E31-987E-C395ADBB77D0":0,"6AB0690E-00EF-4F7E-B46F-2A59467AA0E8": 0}

返回值说明

1: 代表被排重,0: 代表未被排重

功能实现

逻辑:

首先使用explode(",",$idfa)将idfa字符串转为数组

  • 使用explode(",",$idfa)将idfa字符串转为数组
  • array_unique() 去除重复得到$idfa_arr
  • 使用where in 查询出数据库中存在的idfa并将其转为一维数组,得到$selectResult_deal(即为被排重的idfa数组)
  • 将 $idfa_arr 与 $selectResult_deal 进行array_diff()即可得到 未被排重的idfa数组
  • 在进一步格式处理即可

主要代码如下:

//将idfa字符串以逗号分割为数组并去重复
$idfa_arr = array_unique(explode(",",$idfa));

$wallClickModel = new WallClickModel();
$selectResult = $wallClickModel ->where('idfa' ,'in',$idfa_arr)
		->where('bid',$bid)
		->field('idfa')
		->select()
		->toArray();

//处理批量查询结果 组成idfa一维数组
$selectResult_deal = array_column($selectResult,'idfa','');
//比较idfa数组与 数据库查询出的idfa数组 返回差集
$idfa_diff_arr = array_diff($idfa_arr,$selectResult_deal);

//0 未被排重
$result_arr0 = array();
foreach($idfa_diff_arr as $k=>$v){
	$result_arr0 = array_merge($result_arr0,[$v=>0]);
}
//1 被排重
$result_arr1 = array();
foreach($selectResult_deal as $k=>$v){
	$result_arr1 = array_merge($result_arr1,[$v=>1]);
}

$result_arr = array_merge($result_arr1,$result_arr0);
php批量排重

其他

若网友有更好的方法,请指教

admin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: