php批量排重、批量查询判断 -j9九游会真人游戏第一品牌

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

功能描述

实现批量排重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批量排重

其他

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


发表评论 登录

目前评论:0