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