php array_diff 二位数组,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']

$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);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值