You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现自定义格式字母迭代:生成带数字前缀的指定序列

实现带数字前缀的自定义列名迭代逻辑

你的需求是按深度优先顺序生成带数字前缀的列名:先遍历单个字母的所有数字前缀(1A200A),再遍历该字母开头的多字母组合的所有数字前缀(1AA200AA、1AB200AB…1AZ200AZ),之后切换到下一个字母(B)重复流程,完全区别于原代码的Excel式广度优先顺序(先A-Z再AA-AZ)。

实现思路

  1. 采用深度优先遍历生成字母序列(A → AA → AB → … → AZ → B → BA → …),而非原代码的广度优先
  2. 对每个生成的字母组合,批量拼接1~200的数字前缀,直接加入结果数组
  3. 递归过程中加入终止判断,到达指定结束列时立即停止

代码实现

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 18:05:30