近期重写业务代码,其中需要实现批量从数据库排重并返回结果的功能,现记录如下
功能描述
实现批量排重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);
其他
若网友有更好的方法,请指教
目前评论:0