zgxblog

 

 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,[]);
             }
         }
     }
 }
}

 

分类:

技术点:

相关文章:

  • 2021-06-21
  • 2021-10-08
  • 2021-10-08
  • 2021-06-23
  • 2019-06-26
  • 2021-10-08
  • 2021-06-07
  • 2021-11-04
猜你喜欢
  • 2021-10-08
  • 2021-12-12
  • 2021-04-18
  • 2021-06-05
  • 2021-07-13
  • 2021-10-08
  • 2021-12-23
相关资源
相似解决方案