PHP两个二维数组数据做比对,相同的更新,并去除重复,不同的追加!
请求数组数据和原有数据做对比(相同的更新,不同的追加,并去除重复数据)
demo: 现在是请求过来的是,二维数组数据,本地的也是二维数组数据,app的包名是唯一的,通过对比本地原有的数据,把包名,作为数组key,然后去和新来的数据做对比,如果新来数据的已存在,并且版本号大于原有数据,那么此应用版本更新,并且去除重复数据 , 反之(不更新),如果新来数据,不存在,那么两个数组追加,最后返回json数据!
实现方法一
通过遍历去做if判断,简单,执行效率高!
- /**
- * 接入数据和本地原有数据做对比,返回json更新数据
- * @param $requestAppData 上报的app数据
- * @param $localAppData 本地已上报过的app数据
- * @return json
- */
- function returnReportAppsJsonData($requestAppData, $localAppData){
-
- foreach($localAppData as $key => $v){
- $localListData[$v['p']]['p']= $v['p'];
- $localListData[$v['p']]['v']= $v['v'];
- $localListData[$v['p']]['f']= $v['f'];
- }
-
- foreach($requestAppData as $key => $val){
- $requestAppList[$key]['p'] = $val['p'];
- $local_data = $localListData[$val['p']];
-
- //本地的包名 == 请求过来的包名,做版本比较
- if ($local_data['p'] == $val['p']) {
- if ($local_data['v'] < $val['v']) {
- $v = $val['v'];
- unset($localListData[$val['p']]);
- } else {
- $v = $local_data['v'];
- unset($localListData[$val['p']]);
- }
- $requestAppList[$key]['v'] = $v;
- $requestAppList[$key]['f'] = $local_data['f'];
- } else {
- $requestAppList[$key]['v'] = $val['v'];
- $requestAppList[$key]['f'] = $val['f'];
- }
-
- //包名为空 删掉
- if ($val['p'] == "" || empty($val['p'])) {
- unset($requestAppList[$key]);
- }
-
- }
-
- $mergeData = @array_merge_recursive($localListData, $requestAppList);
-
- $k = 0;
- foreach($mergeData as $key2 => $md){
- $mergeData2[$k]['p'] = $md['p'];
- $mergeData2[$k]['v'] = $md['v'];
- $mergeData2[$k]['f'] = $md['f'];
- $k++;
- }
-
- return json_encode($mergeData2);
- }
-
实现方法二
通过php原有函数,做交集和差级,对比,在拼接,执行效率略慢!
- /**
- * 接入数据和本地原有数据做对比,返回json更新数据
- * @param $requestAppData 上报的app数据
- * @param $localAppData 本地已上报过的app数据
- * @return json
- */
- function returnReportAppsJsonData($requestAppData, $localAppData){
-
- foreach($localAppData as $key => $v){
- $localListData[$v['p']]['p']= $v['p'];
- $localListData[$v['p']]['v']= $v['v'];
- $localListData[$v['p']]['f']= $v['f'];
- }
-
- foreach($requestAppData as $key => $val){
- $requestAppList[$val['p']]['p']= $val['p'];
- $requestAppList[$val['p']]['v']= $val['v'];
- $requestAppList[$val['p']]['f']= $val['f'];
- }
-
- //交集和本地数据做对比处理
- $interData = @array_intersect_assoc($requestAppList, $localListData);
-
- $k = 0;
- if ($interData) {
- foreach($interData as $ik => $iv){
- $ivData[$k]['p'] = $iv['p'];
- $ivData[$k]['f'] = $iv['f'];
-
- if ($ik == $localListData[$ik]['p']) {
- if ($iv['v']<$localListData[$ik]['v']) {
- $v = $localListData[$ik]['v'];
- } else {
- $v = $iv['v'];
- }
- $ivData[$k]['v'] = $v;
- }
-
- $k++;
- }
- }else{
- $ivData = array();
- }
-
- //新增数据和已存在数据-差级处理 & 反比
- $dki = 0;
- $diffData = @array_diff_assoc($requestAppList, $localListData);
- $diffData2 = @array_diff_assoc($localListData, $requestAppList);
-
- if ($diffData || $diffData2) {
- $diff_data = @array_merge_recursive($diffData, $diffData2);
- foreach($diff_data as $dk => $dv){
- $dvData[$dki]['p'] = $dv['p'];
- $dvData[$dki]['v'] = $dv['v'];
- $dvData[$dki]['f'] = $dv['f'];
- $dki++;
- }
- }else{
- $dvData = array();
- }
-
- $mergeData = @array_merge_recursive($dvData, $ivData);
- // print_r($mergeData);
- // die;
- return json_encode($mergeData);
- }
-
解压密码: detechn或detechn.com
免责声明
本站所有资源出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户自行鉴别,做一个有主见和判断力的用户。
本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。