PHP两个二维数组数据做比对,相同的更新,并去除重复,不同的追加!

本文阅读 2 分钟
首页 PHP笔记 正文

请求数组数据和原有数据做对比(相同的更新,不同的追加,并去除重复数据)
demo: 现在是请求过来的是,二维数组数据,本地的也是二维数组数据,app的包名是唯一的,通过对比本地原有的数据,把包名,作为数组key,然后去和新来的数据做对比,如果新来数据的已存在,并且版本号大于原有数据,那么此应用版本更新,并且去除重复数据 , 反之(不更新),如果新来数据,不存在,那么两个数组追加,最后返回json数据!

实现方法一

通过遍历去做if判断,简单,执行效率高!

  1. /**
  2. * 接入数据和本地原有数据做对比,返回json更新数据
  3. * @param $requestAppData 上报的app数据
  4. * @param $localAppData 本地已上报过的app数据
  5. * @return json
  6. */
  7. function returnReportAppsJsonData($requestAppData, $localAppData){
  8. foreach($localAppData as $key => $v){
  9. $localListData[$v['p']]['p']= $v['p'];
  10. $localListData[$v['p']]['v']= $v['v'];
  11. $localListData[$v['p']]['f']= $v['f'];
  12. }
  13. foreach($requestAppData as $key => $val){
  14. $requestAppList[$key]['p'] = $val['p'];
  15. $local_data = $localListData[$val['p']];
  16. //本地的包名 == 请求过来的包名,做版本比较
  17. if ($local_data['p'] == $val['p']) {
  18. if ($local_data['v'] < $val['v']) {
  19. $v = $val['v'];
  20. unset($localListData[$val['p']]);
  21. } else {
  22. $v = $local_data['v'];
  23. unset($localListData[$val['p']]);
  24. }
  25. $requestAppList[$key]['v'] = $v;
  26. $requestAppList[$key]['f'] = $local_data['f'];
  27. } else {
  28. $requestAppList[$key]['v'] = $val['v'];
  29. $requestAppList[$key]['f'] = $val['f'];
  30. }
  31. //包名为空 删掉
  32. if ($val['p'] == "" || empty($val['p'])) {
  33. unset($requestAppList[$key]);
  34. }
  35. }
  36. $mergeData = @array_merge_recursive($localListData, $requestAppList);
  37. $k = 0;
  38. foreach($mergeData as $key2 => $md){
  39. $mergeData2[$k]['p'] = $md['p'];
  40. $mergeData2[$k]['v'] = $md['v'];
  41. $mergeData2[$k]['f'] = $md['f'];
  42. $k++;
  43. }
  44. return json_encode($mergeData2);
  45. }

实现方法二

通过php原有函数,做交集和差级,对比,在拼接,执行效率略慢!

  1. /**
  2. * 接入数据和本地原有数据做对比,返回json更新数据
  3. * @param $requestAppData 上报的app数据
  4. * @param $localAppData 本地已上报过的app数据
  5. * @return json
  6. */
  7. function returnReportAppsJsonData($requestAppData, $localAppData){
  8. foreach($localAppData as $key => $v){
  9. $localListData[$v['p']]['p']= $v['p'];
  10. $localListData[$v['p']]['v']= $v['v'];
  11. $localListData[$v['p']]['f']= $v['f'];
  12. }
  13. foreach($requestAppData as $key => $val){
  14. $requestAppList[$val['p']]['p']= $val['p'];
  15. $requestAppList[$val['p']]['v']= $val['v'];
  16. $requestAppList[$val['p']]['f']= $val['f'];
  17. }
  18. //交集和本地数据做对比处理
  19. $interData = @array_intersect_assoc($requestAppList, $localListData);
  20. $k = 0;
  21. if ($interData) {
  22. foreach($interData as $ik => $iv){
  23. $ivData[$k]['p'] = $iv['p'];
  24. $ivData[$k]['f'] = $iv['f'];
  25. if ($ik == $localListData[$ik]['p']) {
  26. if ($iv['v']<$localListData[$ik]['v']) {
  27. $v = $localListData[$ik]['v'];
  28. } else {
  29. $v = $iv['v'];
  30. }
  31. $ivData[$k]['v'] = $v;
  32. }
  33. $k++;
  34. }
  35. }else{
  36. $ivData = array();
  37. }
  38. //新增数据和已存在数据-差级处理 & 反比
  39. $dki = 0;
  40. $diffData = @array_diff_assoc($requestAppList, $localListData);
  41. $diffData2 = @array_diff_assoc($localListData, $requestAppList);
  42. if ($diffData || $diffData2) {
  43. $diff_data = @array_merge_recursive($diffData, $diffData2);
  44. foreach($diff_data as $dk => $dv){
  45. $dvData[$dki]['p'] = $dv['p'];
  46. $dvData[$dki]['v'] = $dv['v'];
  47. $dvData[$dki]['f'] = $dv['f'];
  48. $dki++;
  49. }
  50. }else{
  51. $dvData = array();
  52. }
  53. $mergeData = @array_merge_recursive($dvData, $ivData);
  54. // print_r($mergeData);
  55. // die;
  56. return json_encode($mergeData);
  57. }
解压密码: detechn或detechn.com

免责声明

本站所有资源出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。

本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户自行鉴别,做一个有主见和判断力的用户。

本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。

2019 Excel超强实战
« 上一篇 09-26
[Android] 反向录影 v1.4.0.3.0直装/专业版
下一篇 » 09-26

发表评论