分享一個PHP函數,用來找出5個Array的交集

/**
    數組碰撞,找出多個數組的重疊值
    返回:
        重整之後的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;
}

 

posted @   已經停更  阅读(574)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示