扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
?php
创新互联公司是一家专注网站建设、网络营销策划、小程序开发、电子商务建设、网络推广、移动互联开发、研究、服务为一体的技术型公司。公司成立十多年以来,已经为1000多家成都混凝土搅拌罐车各业的企业公司提供互联网服务。现在,服务的1000多家客户与我们一路同行,见证我们的成长;未来,我们一起分享成功的喜悦。
$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) "李四" }
}
需要比两次才能互相比出差集,再合并结果。还有这里的记录间根据各项内容(比如名字)来确定不同,所以用自定义的对内容的比较规则..
$arr1=array(array(1,2,3,4,5),array(6,7,8,9,10),array(11,12,13,14,15),array(16,17,18,19,20));
$arr2=array(array(1,2,3,4,5),array(11,12,13,14,15));
$arr3=array();
foreach ($arr1 as $key = $value) {
if(!in_array($value,$arr2)){
$arr3[]=$value;
}
}
var_dump($arr3);
php
array_udiff()
函数用于比较两个(或更多个)数组的键名和键值,并返回差集。此比较是通过用户提供的回调函数来进行的。如果认为第一个参数小于,等于,或大于第二个参数时必须分别返回一个小于零,等于零,或大于零的整数。本文章通过实例向大家讲解array_udiff()函数的使用方法,
array_udiff_assoc
—
带索引检查计算数组的差集,用回调函数比较数据
基本语法:
array
array_udiff_assoc
(
array
$array1
,
array
$array2
[,
array
$
...
],
callable
$data_compare_func
)
此比较是通过用户提供的回调函数来进行的。如果认为第一个参数小于,等于,或大于第二个参数时必须分别返回一个小于零,等于零,或大于零的整数。
Note:
注意本函数只检查了多维数组中的一维。当然,可以用
array_udiff_assoc($array1[0],
$array2[0],
"some_comparison_func");
来检查更深的维度。
参数介绍
参数
描述
array1
必需。第一个数组。
array2
必需。第二个数组。
myfunction
必需。字符串值,定义可调用的比较函数。
在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于
的整数。
返回值
array_udiff_assoc()
返回一个数组,该数组包括了所有在
array1
中但是不在任何其它参数数组中的值。注意和
array_diff()
与
array_udiff()
不同的是键名也用于比较。数组数据的比较是用用户提供的回调函数进行的。在此方面和
array_diff_assoc()
的行为正好相反,后者是用内部函数进行比较的。
实例
?php
class
cr
{
private
$priv_member;
function
cr($val)
{
$this-priv_member
=
$val;
}
static
function
comp_func_cr($a,
$b)
{
if
($a-priv_member
===
$b-priv_member)
return
0;
return
($a-priv_member
$b-priv_member)
?
1
:
-1;
}
}
$a
=
array(
"0.1"
=
new
cr(9)
,
"0.5"
=
new
cr(12)
,
=
new
cr(23)
,
1
=
new
cr(4)
,
2
=
new
cr(-15)
,
);
$b
=
array(
"0.2"
=
new
cr(9)
,
"0.5"
=
new
cr(22)
,
=
new
cr(3)
,
1
=
new
cr(4)
,
2
=
new
cr(-15)
,
);
$result
=
array_udiff_assoc($a,
$b,
array(
"cr",
"comp_func_cr"
));
print_r($result);
?
运行结果:
Array
(
[0.1]
=
cr
Object
(
[priv_member:private]
=
9
)
[0.5]
=
cr
Object
(
[priv_member:private]
=
12
)
[0]
=
cr
Object
(
[priv_member:private]
=
23
)
)
上例中可以看到键值对
"1"
=
new
cr(4)
同时出现在两个数组中因此不在本函数的输出中。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流