php求两个数据的差集 php数组取差集
php 求二维数组的差集
$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数组的几个操作,求并集,交集,差集,数组
PHP数组的几个操作,求并集,交集,差集,数组与字符串的相互转换及数组去重
在php中如果我想要对两个数组进行如并集、交集和差集操作,我们可直接使用php自带的函数来操作如array_merge(),array_intersect(),array_diff().
计算数组的合并 array_merge与“+”的区别
array_merge() 函数把两个或多个数组合并为一个数组。
如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的),如果数组是数字索引的,则键名会以连续方式重新索引。
注释:如果仅仅向 array_merge() 函数输入了一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引.代码如下:
$a = array(1 = 'a', 'b', 'c');
$b = array(1 = 'aa', 2, 'c');
$union = array_merge($a, $b);
$plus = $a + $b;
print_r($union);
print_r($plus);
//结果依次为:
Array
{
[0]= a
[1]= b
[2]= c
[3]= aa
[4]= 2
[5]= c
}
Array
(
[1] = a
[2] = b
[3] = c
)
要合并的两个数组中有相同的字符串键的时候,使用array_merge()会覆盖掉原来的值,而使用“+”合并数组则会和用“+”号合并数组相同数字键一样把最先出现的值作为最终结果返回,如下例:
$a2 = array('str' = 'a', 'b', 'c');
$b2 = array('str' = 'aa', 2, 'c');
$union2 = array_merge($a2, $b2);
$plus2 = $a2 + $b2;
print_r($union2);
print_r($plus2);
//结果依次为:
Array
(
[str] = aa
[0] = b
[1] = c
[2] = 2
[3] = c
)
Array
(
[str] = a
[0] = b
[1] = c
)
注:如果想用array_merge合并两个数组,返回结果可能还会有相同的元素,这时候可以用array_unique()把相同的元素去掉
计算数组的交集
array_intersect() 函数返回两个或多个数组的交集数组,结果数组包含了所有在被比较数组中,也同时出现在所有其他参数数组中的值,键名保留不变,注释:仅有值用于比较,代码如下:
$a = array('jpg','png','gif','bmp');
$b = array('JPG','txt','docx','bmp');
$intersection = array_intersect($a, $b);
还可以通过函数,获取自己想要的(比如元素不区分大小写),代码如下:
$intersection2 = array_intersect(array_map('strtolower',$a), array_map('strtolower',$b));
print_r($intersection);
print_r($intersection2);
//结果依次为:
Array
(
[3] = bmp
)
Array (
[0] = jpg
[3] = bmp
)
计算数组的差集,代码如下:
$old = array('jpg','png','gif','bmp');
$new = array('JPG','txt','docx','bmp');
$difference = array_diff($old, $new);
注:返回结果的元素包含$old的元素,不包括$new的元素
print_r($difference);
结果为:
Array
(
[0] = jpg
[1] = png
[2] = gif
)
也可以用函数先进行处理,再计算差集
array_diff() 函数返回两个数组的差集数组。该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的键值,在返回的数组中,键名保持不变。
语法:array_diff(array1,array2,array3...)
代码如下:
$difference = array_diff(array_map('strtolower',$old),
array_map('strtolower',$new));
数组转换为字符串:
?php
$arr = array('Hello','World!','I','love','Shanghai!');
echo implode(" ",$arr);
?
字符串转换为数组:
?php
$str="1432532 ,4444";
$arr = explode(",",$str);
echo count($arr)."/br";
print_r($arr);
?
数组元素值去重
?php
$a=array("a"="red","b"="green","c"="red");
print_r(
array_unique($a)
);
?
针对有空格的字符串转换成无空格的字符串
?php
$str="1432532 ,67878";
$arr = explode(",",$str);
//echo count($arr)."/br";
$str_u='';
for($i=0;$icount($arr);$i++)
{
$str_u .=trim($arr[$i]).',';
}
echo $str_u;
?
php array_udiff_assoc 计算两个数组的差集实例
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)
同时出现在两个数组中因此不在本函数的输出中。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
php 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) "李四" }
}
需要比两次才能互相比出差集,再合并结果。还有这里的记录间根据各项内容(比如名字)来确定不同,所以用自定义的对内容的比较规则..
文章名称:php求两个数据的差集 php数组取差集
文章分享:http://cdiso.cn/article/docigoh.html