php 2个二维数组 如何判断差集?
第一个数组从API接口获取JSON数据转换成数组后第一个数组,从API接口获取到的JSON转换为数组后Array([0]=>Array([sbnumber]=>0513-...
第一个数组 从API接口获取JSON数据转换成数组后
第一个数组,从API接口获取到的JSON转换为数组后
Array
(
[0] => Array([sbnumber] => 0513-0001-00001[name] => 心安苑)
[1] => Array([sbnumber] => 0513-0001-00002[name] => 中正苑)
[2] => Array([sbnumber] => 0513-0001-00003[name] => 务实苑)
[3] => Array([sbnumber] => 0513-0001-00004[name] => 服务苑)
[3] => Array([sbnumber] => 0513-0001-00005[name] => 张三)
)
第二个数组,从数据库读取出来的
Array
(
[0] => Array([sbnumber] => 0513-0001-00001[name] => 心安苑)
[1] => Array([sbnumber] => 0513-0001-00002[name] => 中正苑)
[2] => Array([sbnumber] => 0513-0001-00003[name] => 务实苑)
[3] => Array([sbnumber] => 0513-0001-00004[name] => 服务苑)
)
比较2个数组,例如 第一个数组多出来一个[sbnumber] => 0513-0001-00005[name] => 张三
那么就把这条多出来的数组保留下来,存到数据库。
用 array_diff 不行,如何才能实现2个数组之间的差集? 展开
第一个数组,从API接口获取到的JSON转换为数组后
Array
(
[0] => Array([sbnumber] => 0513-0001-00001[name] => 心安苑)
[1] => Array([sbnumber] => 0513-0001-00002[name] => 中正苑)
[2] => Array([sbnumber] => 0513-0001-00003[name] => 务实苑)
[3] => Array([sbnumber] => 0513-0001-00004[name] => 服务苑)
[3] => Array([sbnumber] => 0513-0001-00005[name] => 张三)
)
第二个数组,从数据库读取出来的
Array
(
[0] => Array([sbnumber] => 0513-0001-00001[name] => 心安苑)
[1] => Array([sbnumber] => 0513-0001-00002[name] => 中正苑)
[2] => Array([sbnumber] => 0513-0001-00003[name] => 务实苑)
[3] => Array([sbnumber] => 0513-0001-00004[name] => 服务苑)
)
比较2个数组,例如 第一个数组多出来一个[sbnumber] => 0513-0001-00005[name] => 张三
那么就把这条多出来的数组保留下来,存到数据库。
用 array_diff 不行,如何才能实现2个数组之间的差集? 展开
展开全部
<?php
$a=[
["sbnumber" => "0513-0001-00001", "name" => "心安苑"],
["sbnumber" => "0513-0001-00002", "name" => "中正苑"],
["sbnumber" => "0513-0001-00003", "name" => "务实苑"],
["sbnumber" => "0513-0001-00004", "name" => "服务苑"],
["sbnumber" => "0513-0001-00005", "name" => "张三"]
];
$b=[
["sbnumber" => "0513-0001-00001", "name" => "心安苑"],
["sbnumber" => "0513-0001-00002", "name" => "中正苑"],
["sbnumber" => "0513-0001-00003", "name" => "务实苑"],
["sbnumber" => "0513-0001-00004", "name" => "服务苑"],
["sbnumber" => "0513-0001-00007", "name" => "李四"]
];
$cmp=function($av, $bv){
$r=strcmp($av['sbnumber'],$bv['sbnumber']);
return $r===0 ? strcmp($av['name'],$bv['name']) : $r;
};
$c=array_values(array_udiff($a, $b, $cmp));
$d=array_udiff($b, $a, $cmp);
foreach($d as &$dv) $c[]=$dv;
unset($d);
var_dump($c);
array(2) {
[0]=> array(2) { ["sbnumber"]=> string(15) "0513-0001-00005" ["name"]=> string(6) "张三" }
[1]=> array(2) { ["sbnumber"]=> string(15) "0513-0001-00007" ["name"]=> string(6) "李四" }
}
需要比两次才能互相比出差集,再合并结果。还有这里的记录间根据各项内容(比如名字)来确定不同,所以用自定义的对内容的比较规则..
展开全部
$arr_1 = [
["sbnumber" => "0513-0001-00001", "name" => "心安苑"],
["sbnumber" => "0513-0001-00002", "name" => "中正苑"],
["sbnumber" => "0513-0001-00003", "name" => "务实苑"],
["sbnumber" => "0513-0001-00004", "name" => "服务苑"],
["sbnumber" => "0513-0001-00005", "name" => "张三"]
];
$arr_2 = [
["sbnumber" => "0513-0001-00001", "name" => "心安苑"],
["sbnumber" => "0513-0001-00002", "name" => "中正苑"],
["sbnumber" => "0513-0001-00003", "name" => "务实苑"],
["sbnumber" => "0513-0001-00004", "name" => "服务苑"]
];
$arr_3 = array_udiff($arr_1, $arr_2, function ($a, $b) {
if ($a === $b) {
return 0;
}
return ($a > $b) ? 1 : -1;
});
print_r($arr_3);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先把两个二维数组转换为一维数组就可以使用array_diff了,转换的一维数组格式为:
['0513-0001-00001' => '心安苑',
'0513-0001-00002' => '中正苑',
'0513-0001-00003' => '务实苑',
'0513-0001-00004' => '服务苑']
转换逻辑(把$arr1转换为$new1):
$new1=array();
foreach ($arr1 as $a) $new1[$a['sbnumber']]=$a['name'];
['0513-0001-00001' => '心安苑',
'0513-0001-00002' => '中正苑',
'0513-0001-00003' => '务实苑',
'0513-0001-00004' => '服务苑']
转换逻辑(把$arr1转换为$new1):
$new1=array();
foreach ($arr1 as $a) $new1[$a['sbnumber']]=$a['name'];
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询