php数据差集,php数组差集

php 2个二维数组 如何判断差集?

?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) "李四" } 

}

需要比两次才能互相比出差集,再合并结果。还有这里的记录间根据各项内容(比如名字)来确定不同,所以用自定义的对内容的比较规则..

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 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数据差集,php数组差集
文章转载:http://scyanting.com/article/hshgee.html