分享一個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;
}
我们永远不要期待别人的拯救,只有自己才能升华自己。自己已准备好了多少容量,方能吸引对等的人与我们相遇,否则再美好的人出现、再动人的事情降临身边,我们也没有能量去理解与珍惜,终将擦肩而过。—— 姚谦《品味》