近期重写业务代码,其中需要实现批量从数据库排重并返回结果的功能,现记录如下
功能描述
实现批量排重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