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