使用PHP列出按字母顺序(A-Z)的最佳方法

48

我需要打印/列出字母表(A-Z)字符以管理Excel单元格。是否有任何PHP函数可以列出字母表?

我需要的结果是

A1
B1
C1
D1
...
...

或者

A
B
C
...
...

这是否有可能?

11个回答

133

您可以选择执行以下操作:

foreach (range('A', 'Z') as $char) {
    echo $char . "\n";
}

或者:

for ($char = 'A'; $char <= 'Z'; $char++) {
    echo $char . "\n";
}

@VeckHsiao 只需使用交错循环即可。 - Noah Krasser
@VeckHsiao请看这个答案:https://dev59.com/qGYr5IYBdhLWcg3wcJx0#13672617 - CodeBrauer
2
第二种形式在PHP 7.3中不起作用,可能在PHP 7.x中也不起作用。 - Michael restore Monica Cellio

15

range()自PHP4.1版本开始支持字母,所以你可以这样做:

$azRange = range('A', 'Z');
foreach ($azRange as $letter)
{
  print("$letter\n");
}

6
您也可以这样做:使用ASCII范围。
for($i = 65 ; $i<=90; $i++)
{
  echo chr($i);
}

3

我创建了一个常数时间的函数如下:

该函数将数字索引转换为字母表示。

public static $alpha = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];

public static function getColName($index){
  $index--;
  $nAlphabets = 26;
  $f = floor($index/pow($nAlphabets,0)) % $nAlphabets;
  $s = (floor($index/pow($nAlphabets,1)) % $nAlphabets)-1;
  $t = (floor($index/pow($nAlphabets,2)) % $nAlphabets)-1;

  $f = $f < 0 ? '' : self::$alpha[$f];
  $s = $s < 0 ? '' : self::$alpha[$s];
  $t = $t < 0 ? '' : self::$alpha[$t];

  return trim("{$t}{$s}{$f}");

}

现在,如果您想使用它创建一个范围。您可以在循环中调用此函数将您的值推送到数组中。
对于大多数情况下,我们需要的是表示而不是范围,这个函数可以正常工作。
如何使用
只需将这些静态函数放入一个类中并使用它即可。
className::getColName(47);

在我的情况下,制作一个范围是浪费内存。

然而,这并不是浪费处理器的行为。而且,如果它具有某种技术价值,而我却没有意识到,它的缺陷在于难以阅读,更重要的是它不符合主题设定的要求。除非存在对应于空字符串或两个字母组合的 Excel 单元格。但那些具有两个字母的单元格也需要行号的数字。 - Bevelopper

2

这个:

$range = range("A", "Z");
for ($i=1; i<=100; i++) {
    foreach ($range as $letter) {
      print("$letter$i\n");
    }
}

将会为您打印出所有的组合:
A1
B1
C1
... ...
... ...
V100
W100
Z100

根据您的需求修改范围即可。


2

我认为你应该使用range函数

$a=range("A","Z");
foreach($a as $char)
    echo $char."\n";

2

这是我的 HTML 代码,使用了 PHP 代码,它运行得很好。

for($i = 'a' ; $i <= 'z' ; $i++){
echo $i. "<br />"; }

信不信由你,这对我来说确实有效,因为我需要像你在这里做的那样将字母递增1。谢谢! - Bill Garrison

1
$len = 0;
for ($char = 'A'; $char <= 'Z'; $char++) {
    $len++;
    if ($len == 26) {
        break;
    }
    echo $char;
}

1
尽管此代码片段可能解决问题,但包括解释真正有助于提高您的帖子质量。请记住,您正在为未来的读者回答问题,这些人可能不知道您的代码建议原因。 - andreas
Flaggers / reviewers:对于仅包含代码的答案,请进行负评而非删除! - Scott Weldon

1

这段代码可以满足您的要求....

<?php 
        $x= 'A';
            for($i=0;$i<26;$i++)
            {
                echo $x."<br/>";//generates A,B,C,D...Z
                $x++;
                if($i == 25)
                {
                    $x = 'A';
                    $y = '1';
                    for($j=0;$j<26;$j++)
                    {
                        echo $x.$y."<br />";//generates A1,B1...Z1
                        $x++;
                        if($j == 25)
                        { 
                            $x = 'A';
                            $y++;
                            for($k=0;$k<26;$k++)
                            {
                               echo $x.$y."<br />";//generates A2,B2....Z2
                               $x++; 
                            }
                        }
                    }
                }
            }
        ?>

0

这段代码用于显示 A、B、……、ZY、ZZ。

function print_char($end_no=90, $start_no=65, $prefix_no=0)
{ $vasant='';
    if($prefix_no==0)
    {
        for($set=$start_no; $set<=$end_no; $set++)
        {
            $vasant.=(chr($prefix_no).chr($set)).', ';
        }
    }
    else
    {
        for($set=$start_no; $set<=90; $set++)
        {
            $vasant.=(chr($set)).', ';
        }
        for($pre_loop=65; $pre_loop<=$prefix_no; $pre_loop++)
        {
            for($set=$start_no; $set<=90; $set++)
            {
                if($set>=$end_no && $pre_loop==$prefix_no)
                {
                    $vasant.=(chr($pre_loop).chr($set)).'. ';
                    break;
                }
                else
                {
                    $vasant.=(chr($pre_loop).chr($set)).', ';
                }
            }
        }
    }
    return $vasant;
}


$show=print_char(90,65,90);
echo $show;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接