zoukankan      html  css  js  c++  java
  • 无限递归循环不重复组合

     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,[]);
                 }
             }
         }
     }
    }
  • 相关阅读:
    应用上架前如何知道自己应用的下载地址?
    Multi-line NSAttributedString with truncated text
    Adding AirDrop File Sharing Feature to Your iOS Apps
    Add sharing to your app via UIActivityViewController
    [原]iOS自带社会化分享框架——Social.framework
    xcode 制作静态库.a文件 详解
    Fiddler怎么对IPhone手机的数据进行抓包分析
    Mac上的抓包工具Charles
    30、准确计算CoreText高度的方法
    keil MDK中如何生成*.bin格式的文件
  • 原文地址:https://www.cnblogs.com/zgxblog/p/9077567.html
Copyright © 2011-2022 走看看