对于两个或者多个(个数确定)数组取交并集非常简单,通过内置函数:
$fruit1 = array("Apple","Banana","Orange"); $fruit2 = array("Pear","Apple","Grape"); $fruit3 = array("Watermelon","Orange","Apple"); $intersection = array_intersect($fruit1, $fruit2, $fruit3); print_r($intersection);
二维数组取交并集,我们可以循环法:
$arr=array(
array('a'=>'1',2),
array(3,4)
);
$ar=array(
array('a'=>1,2),
array(3,4)
);
foreach ($arr as $value){
foreach ($ar as $val){
if($value==$val){
$nearr[]=$value;
}
}
}
print_r($nearr);
但是如果一个需求是,通过勾选多少组数据,然后对这N组数据进行取交集,你该怎么办?
这时候你不可方便的建立N层循环来进行取交集,引入一个以空间换时间的概念:
var preadkpis = {
arrayintersect : function () { //数组取交集
var result = new Array();
var obj = {};
for (var i = 0; i < arguments.length; i++) {
for (var j = 0; j < arguments[i].length; j++) {
var str = arguments[i][j];
if (!obj[str]) {
obj[str] = 1;
}
else {
obj[str]++;
if (obj[str] == arguments.length)
{
result.push(str);
}
}
}
}
return result;
},
arrayunion : function (a,b) { //数组取并集
var arr = new Array();
var obj = {};
for (var i = 0; i < arguments.length; i++) {
for (var j = 0; j < arguments[i].length; j++)
{
var str=arguments[i][j];
if (!obj[str])
{
obj[str] = 1;
arr.push(str);
}
}
}
return arr;
},
arrayminus : function (a,b) { //数组取差集
var result = new Array();
var obj = {};
for (var i = 0; i < arr.length; i++) {
obj[arr[i]] = 1;
}
for (var j = 0; j < this.length; j++) {
if (!obj[this[j]])
{
obj[this[j]] = 1;
result.push(this[j]);
}
}
return result;
},
arrayuniquelize :function(a) { // 去重
var tmp = {},
ret = [];
for (var i = 0, j = this.length; i < j; i++) {
if (!tmp[this[i]]) {
tmp[this[i]] = 1;
ret.push(this[i]);
}
}
return ret;
}
}
使用方法:
var args=[];
$('input.toolcheck:checked').each(function(){
var curcon=$(this).val();
args.push(curcon);
});
// 通过jq获取勾选内容,到达这里args形式(需要变化为arguments参数方式传入函数)
// args=[
// '12,35,69,869,569,45,23,81',
// '12,35,64,869,569,45,23,84',
// '12,35,62,869,569,45,23,80',
// ],
var strs = [];
for(var key in args){
strs.push('args['+key+'].split(\',\')');
}
var fn = 'var k=preadkpis.arrayintersect('+strs.toString()+')';
eval(fn);
k.toString()就是最后得到的交集并转化为了字符串以供展示