分享一個PHP函數,用來找出5個Array的交集   
               添加时间:2013-6-1 点击量: 
 
              
	/
		數組碰撞,找出多個數組的重疊值
		返回:
			重整之後的Array,如下:
			¥arr=Array(
				0=>,	//5個數組重疊的部份
				1=>,	//第1個數組去掉[0]的值后
				2=>,	//第2個數組去掉[0]的值后
				3=>,	//第3個數組去掉[0]的值后
				4=>,	//第4個數組去掉[0]的值后
				5=>,	//第5個數組去掉[0]的值后
			);
		參數:
			要重整的5個數組
	//
	Public Static Function JiaoJi(¥arr1,¥arr2,¥arr3,¥arr4,¥arr5) {
		IF(!Is_array(¥arr1) Or !Is_array(¥arr2) Or !Is_array(¥arr3) Or !Is_array(¥arr4) Or !Is_array(¥arr5)) {
			throw New Exception(Error:.__LINE__.,參數錯誤!);Die();
		}
		¥arr=Array();
		//找出這5個數組中重複的部份,賦值給¥arr[0]
		{
			//合併數組
			¥narr=Array_Merge(¥arr1,¥arr2,¥arr3,¥arr4,¥arr5);
			//降維
			Foreach(¥narr as ¥v){
				¥v = Implode(`,¥v);	//降维
				¥temp[] = ¥v;
			}unSet(¥narr);
			//去反复
			¥unique_arr = Array_Unique(¥temp);
			//取差集
			¥repeat_arr = Array_Diff_Assoc(¥temp,¥unique_arr);unSet(¥temp,¥unique_arr);
			//去重複
			¥repeat_arr=Array_Unique(¥repeat_arr);
			//升維
			Foreach(¥repeat_arr as ¥k=>¥v){
				¥v = Explode(`,¥v);
				¥v[gid]=¥v[0];unSet(¥v[0]);
				¥v[cod]=¥v[1];unSet(¥v[1]);
				¥v[tid1]=¥v[2];unSet(¥v[2]);
				¥v[tid2]=¥v[3];unSet(¥v[3]);
				¥v[stime]=¥v[4];unSet(¥v[4]);
				¥temp[] = ¥v;
			}
			¥arr[0]=¥temp;
			unSet(¥temp,¥repeat_arr);
		}
		/
		去掉5個數組中包含¥arr[0]的部份
		array(5) {
		  [gid]=>string(1) 2
		  [cod]=>string(4) 4002
		  [tid1]=>string(3) 184
		  [tid2]=>string(3) 199
		  [stime]=>string(19) 2013-07-25 02:19:00
		}
		//
		¥max=Max(Count(¥arr1),Count(¥arr2),Count(¥arr3),Count(¥arr4),Count(¥arr5));
		Foreach(¥arr[0] as ¥k=>¥v) {
			For(¥i=0;¥i<¥max;¥i++) {
				//去掉arr1和¥arr[0]的重複部份
				IF(isSet(¥arr1[¥i])) {
					IF(¥arr1[¥i][gid]==¥v[gid] And ¥arr1[¥i][cod]==¥v[cod] And ¥arr1[¥i][tid1]==¥v[tid1] And ¥arr1[¥i][tid2]==¥v[tid2] And ¥arr1[¥i][stime]==¥v[stime]) {
						unSet(¥arr1[¥i]);
					}
				}
				//去掉arr2和¥arr[0]的重複部份
				IF(isSet(¥arr2[¥i])) {
					IF(¥arr2[¥i][gid]==¥v[gid] And ¥arr2[¥i][cod]==¥v[cod] And ¥arr2[¥i][tid1]==¥v[tid1] And ¥arr2[¥i][tid2]==¥v[tid2] And ¥arr2[¥i][stime]==¥v[stime]) {
						unSet(¥arr2[¥i]);
					}
				}
				//去掉arr3和¥arr[0]的重複部份
				IF(isSet(¥arr3[¥i])) {
					IF(¥arr3[¥i][gid]==¥v[gid] And ¥arr3[¥i][cod]==¥v[cod] And ¥arr3[¥i][tid1]==¥v[tid1] And ¥arr3[¥i][tid2]==¥v[tid2] And ¥arr3[¥i][stime]==¥v[stime]) {
						unSet(¥arr3[¥i]);
					}
				}
				//去掉arr4和¥arr[0]的重複部份
				IF(isSet(¥arr4[¥i])) {
					IF(¥arr4[¥i][gid]==¥v[gid] And ¥arr4[¥i][cod]==¥v[cod] And ¥arr4[¥i][tid1]==¥v[tid1] And ¥arr4[¥i][tid2]==¥v[tid2] And ¥arr4[¥i][stime]==¥v[stime]) {
						unSet(¥arr4[¥i]);
					}
				}
				//去掉arr5和¥arr[0]的重複部份
				IF(isSet(¥arr5[¥i])) {
					IF(¥arr5[¥i][gid]==¥v[gid] And ¥arr5[¥i][cod]==¥v[cod] And ¥arr5[¥i][tid1]==¥v[tid1] And ¥arr5[¥i][tid2]==¥v[tid2] And ¥arr5[¥i][stime]==¥v[stime]) {
						unSet(¥arr5[¥i]);
					}
				}
			}
		}unSet(¥max);
		¥arr[1]=¥arr1;unSet(¥arr1);
		¥arr[2]=¥arr2;unSet(¥arr2);
		¥arr[3]=¥arr3;unSet(¥arr3);
		¥arr[4]=¥arr4;unSet(¥arr4);
		¥arr[5]=¥arr5;unSet(¥arr5);
		Return ¥arr;
	}
我们永远不要期待别人的拯救,只有自己才能升华自己。自己已准备好了多少容量,方能吸引对等的人与我们相遇,否则再美好的人出现、再动人的事情降临身边,我们也没有能量去理解与珍惜,终将擦肩而过。—— 姚谦《品味》
                     
                  
     
  
 
    
    
/
數組碰撞,找出多個數組的重疊值
返回:
重整之後的Array,如下:
¥arr=Array(
0=>, //5個數組重疊的部份
1=>, //第1個數組去掉[0]的值后
2=>, //第2個數組去掉[0]的值后
3=>, //第3個數組去掉[0]的值后
4=>, //第4個數組去掉[0]的值后
5=>, //第5個數組去掉[0]的值后
);
參數:
要重整的5個數組
//
Public Static Function JiaoJi(¥arr1,¥arr2,¥arr3,¥arr4,¥arr5) {
IF(!Is_array(¥arr1) Or !Is_array(¥arr2) Or !Is_array(¥arr3) Or !Is_array(¥arr4) Or !Is_array(¥arr5)) {
throw New Exception(Error:.__LINE__.,參數錯誤!);Die();
}
¥arr=Array();
//找出這5個數組中重複的部份,賦值給¥arr[0]
{
//合併數組
¥narr=Array_Merge(¥arr1,¥arr2,¥arr3,¥arr4,¥arr5);
//降維
Foreach(¥narr as ¥v){
¥v = Implode(`,¥v); //降维
¥temp[] = ¥v;
}unSet(¥narr);
//去反复
¥unique_arr = Array_Unique(¥temp);
//取差集
¥repeat_arr = Array_Diff_Assoc(¥temp,¥unique_arr);unSet(¥temp,¥unique_arr);
//去重複
¥repeat_arr=Array_Unique(¥repeat_arr);
//升維
Foreach(¥repeat_arr as ¥k=>¥v){
¥v = Explode(`,¥v);
¥v[gid]=¥v[0];unSet(¥v[0]);
¥v[cod]=¥v[1];unSet(¥v[1]);
¥v[tid1]=¥v[2];unSet(¥v[2]);
¥v[tid2]=¥v[3];unSet(¥v[3]);
¥v[stime]=¥v[4];unSet(¥v[4]);
¥temp[] = ¥v;
}
¥arr[0]=¥temp;
unSet(¥temp,¥repeat_arr);
}
/
去掉5個數組中包含¥arr[0]的部份
array(5) {
[gid]=>string(1) 2
[cod]=>string(4) 4002
[tid1]=>string(3) 184
[tid2]=>string(3) 199
[stime]=>string(19) 2013-07-25 02:19:00
}
//
¥max=Max(Count(¥arr1),Count(¥arr2),Count(¥arr3),Count(¥arr4),Count(¥arr5));
Foreach(¥arr[0] as ¥k=>¥v) {
For(¥i=0;¥i<¥max;¥i++) {
//去掉arr1和¥arr[0]的重複部份
IF(isSet(¥arr1[¥i])) {
IF(¥arr1[¥i][gid]==¥v[gid] And ¥arr1[¥i][cod]==¥v[cod] And ¥arr1[¥i][tid1]==¥v[tid1] And ¥arr1[¥i][tid2]==¥v[tid2] And ¥arr1[¥i][stime]==¥v[stime]) {
unSet(¥arr1[¥i]);
}
}
//去掉arr2和¥arr[0]的重複部份
IF(isSet(¥arr2[¥i])) {
IF(¥arr2[¥i][gid]==¥v[gid] And ¥arr2[¥i][cod]==¥v[cod] And ¥arr2[¥i][tid1]==¥v[tid1] And ¥arr2[¥i][tid2]==¥v[tid2] And ¥arr2[¥i][stime]==¥v[stime]) {
unSet(¥arr2[¥i]);
}
}
//去掉arr3和¥arr[0]的重複部份
IF(isSet(¥arr3[¥i])) {
IF(¥arr3[¥i][gid]==¥v[gid] And ¥arr3[¥i][cod]==¥v[cod] And ¥arr3[¥i][tid1]==¥v[tid1] And ¥arr3[¥i][tid2]==¥v[tid2] And ¥arr3[¥i][stime]==¥v[stime]) {
unSet(¥arr3[¥i]);
}
}
//去掉arr4和¥arr[0]的重複部份
IF(isSet(¥arr4[¥i])) {
IF(¥arr4[¥i][gid]==¥v[gid] And ¥arr4[¥i][cod]==¥v[cod] And ¥arr4[¥i][tid1]==¥v[tid1] And ¥arr4[¥i][tid2]==¥v[tid2] And ¥arr4[¥i][stime]==¥v[stime]) {
unSet(¥arr4[¥i]);
}
}
//去掉arr5和¥arr[0]的重複部份
IF(isSet(¥arr5[¥i])) {
IF(¥arr5[¥i][gid]==¥v[gid] And ¥arr5[¥i][cod]==¥v[cod] And ¥arr5[¥i][tid1]==¥v[tid1] And ¥arr5[¥i][tid2]==¥v[tid2] And ¥arr5[¥i][stime]==¥v[stime]) {
unSet(¥arr5[¥i]);
}
}
}
}unSet(¥max);
¥arr[1]=¥arr1;unSet(¥arr1);
¥arr[2]=¥arr2;unSet(¥arr2);
¥arr[3]=¥arr3;unSet(¥arr3);
¥arr[4]=¥arr4;unSet(¥arr4);
¥arr[5]=¥arr5;unSet(¥arr5);
Return ¥arr;
}
我们永远不要期待别人的拯救,只有自己才能升华自己。自己已准备好了多少容量,方能吸引对等的人与我们相遇,否则再美好的人出现、再动人的事情降临身边,我们也没有能量去理解与珍惜,终将擦肩而过。—— 姚谦《品味》




