PHP实现自定义格式字母迭代:生成带数字前缀的指定序列
实现带数字前缀的自定义列名迭代逻辑
你的需求是按深度优先顺序生成带数字前缀的列名:先遍历单个字母的所有数字前缀(1A200A),再遍历该字母开头的多字母组合的所有数字前缀(1AA200AA、1AB200AB…1AZ200AZ),之后切换到下一个字母(B)重复流程,完全区别于原代码的Excel式广度优先顺序(先A-Z再AA-AZ)。
实现思路
- 采用深度优先遍历生成字母序列(A → AA → AB → … → AZ → B → BA → …),而非原代码的广度优先
- 对每个生成的字母组合,批量拼接1~200的数字前缀,直接加入结果数组
- 递归过程中加入终止判断,到达指定结束列时立即停止
代码实现
public function createCustomColumnsArray($end_column, $numStart = 1, $numEnd = 200, $prefix = '') { $columns = []; $letters = range('A', 'Z'); foreach ($letters as $letter) { // 拼接当前字母组合 $currentLetter = $prefix . $letter; // 生成当前字母组合对应的所有数字前缀项(小写形式,大写可去掉strtolower) for ($num = $numStart; $num <= $numEnd; $num++) { $columns[] = $num . strtolower($currentLetter); } // 到达终止列则直接返回结果 if ($currentLetter === $end_column) { return $columns; } // 递归处理当前字母的子组合(如A→AA) $childColumns = $this->createCustomColumnsArray($end_column, $numStart, $numEnd, $currentLetter); $columns = array_merge($columns, $childColumns); // 递归返回后检查是否已包含终止列,若有则停止后续循环 if (in_array($numEnd . strtolower($end_column), $columns)) { return $columns; } } return $columns; }
代码说明
- 深度优先逻辑保证:处理完A的所有数字项后,立刻递归处理AA的数字项,直到AZ的数字项全部生成,才会切换到B的数字项
- 数字前缀范围通过
$numStart和$numEnd参数可灵活调整,默认1~200 - 终止判断精准:当生成的字母组合等于传入的
$end_column时,立即终止递归并返回结果
内容的提问来源于stack exchange,提问作者Kiel
相关产品推荐
相关产品推荐

