1. 程式人生 > >PHP演算法 引數組合,多個分類不同組合列表

PHP演算法 引數組合,多個分類不同組合列表

演算法:多個屬性不同的組合
/**
* 風.Fox
*/
class test {
    //組合
    public static $attNew=array();
    //源
    public static $att=array();
    //個數
    public static $attCount=0;
    /**
     * 格式化行
     */
    public function formatRow(){
        //屬性
        $att=array(1 =>array(1,2,3,4),
            5 =>array(6,7,8,9),
            10 =>array(11,12,13)
        );
        if(is_array($att))foreach($att as $x){
            self::$att[]=$x;
        }
        //屬性個數
        self::$attCount=count(self::$att);
        $this->Combination();
        print_r(self::$attNew);
    }

    /**
     * 組合
     */
    public function Combination(){
        $num = func_num_args();
        if($num==0){
            call_user_func_array(array($this,__FUNCTION__),array($num));
        }else{
            $t=func_get_args();
            $num =$num-1;
            $i=$t[$num];
            if(is_array(self::$att))foreach(self::$att[$i] as $r){
                if(self::$attCount>0&&self::$attCount==($i+1)){
                    $a=array();
                    for($x=0;$x<$num;$x++){
                        $a[]=$t[$x];
                    }
                    $a[]=$r;
                    self::$attNew[]=$a;
                    //return $s;
                }else{
                    $arr=array();
                    for($x=0;$x<$num;$x++){
                        $arr[]=$t[$x];
                    }
                    $arr[]=$r;
                    $arr[]=$i+1;
                    if($num>20){
                        exit('break;');
                        break;
                    }
                    call_user_func_array(array($this,__FUNCTION__),$arr);
                }
            }
        }

    }
}
$test=new test();
$test->formatRow();