private static $divide_data = [];
  /**
   * 测试数组
   * @return
   */
  public function test()
  {    
       $test = [
            ['num'=>1,'name'=>'a'],
            ['num'=>2,'name'=>'b'],
            ['num'=>3,'name'=>'c'],
            ['num'=>4,'name'=>'d'],
            ['num'=>5,'name'=>'e'],
            ['num'=>6,'name'=>'f'],
        ];
        $this->deeploop(1,2,1,0,$test[0],$test,[]);
        $group_arr = self::$divide_data;
         dump($group_arr);
  }    

 

/**
* 无限递归循环不重复组合
* @param int $i   递归次序(初始值1)
* @param int $num   一个组合含有元素个数(设置)
* @param int $start_key   循环初始值 (初始值1)
* @param int $key   数组遍历的key值(初始值0)
* @param string $value   组合的值(初始值$array[0])
* @param array $array   需要递归的数组数据(索引数组)
* @param array $temp_arr   过程判断数组(初始值[])
* @return
*/
public function deeploop($i,$num,$start_key,$key,$value,$array,$temp_arr)
{
     $temp_name = $value['name'];
     $temp_num = $value['num'];
     $i++;
     $total_length = count($array);
     for ($j = $start_key; $j < $total_length; $j++) {
         $temp_arr[$i][] = $j;
         if ($i < $num && $num > 2) {
             $value['num'] = $temp_num . '、' . $array[$j]['num'];
             $value['name'] = $temp_name . '、' . $array[$j]['name'];
             $this->deeploop($i, $num, ++$start_key, $key, $value, $array, $temp_arr);
         }
         if ($i == $num && $num > 2) {
             if (isset($array[$j])) {
                 $value['num'] = $temp_num . '、' . $array[$j]['num'];
                 $value['name'] = $temp_name . '、' . $array[$j]['name'];
                 self::$divide_data[] = ['num' => $value['num'], 'name' => $value['name']];
             }
             if ($key < $total_length && $j == $total_length - 1 && count($temp_arr[$i]) == 1 && $temp_arr[$i][0] == $total_length - 1) {
                 $key++;
                 $this->deeploop(1, $num, $key + 1, $key, $array[$key], $array, []);
             }
         }
         if ($i == $num && $num <= 2) {
             $value['num'] = $temp_num . '、' . $array[$j]['num'];
             $value['name'] = $temp_name . '、' . $array[$j]['name'];
             self::$divide_data[] = ['num' => $value['num'], 'name' => $value['name']];
             if ($j == $total_length - 1 && max($temp_arr[$i]) == $total_length - 1) {
                 $key++;
                 $this->deeploop(1,$num,++$start_key,$key,$array[$key],$array,[]);
             }
         }
     }
 }
}

 

posted on 2018-05-23 16:33  鸥海  阅读(632)  评论(0编辑  收藏  举报