PHP演算法 引數組合,多個分類不同組合列表
阿新 • • 發佈:2019-02-16
演算法:多個屬性不同的組合
/** * 風.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();