PHP:如何输出这样的列表:AA,AB,AC,一直到ZZZY,ZZZZ,ZZZZA等

i-C*_*ICA 5 php algorithm logic

我正在尝试编写一个函数,将一个整数转换为这样的字符串,但我无法弄清楚逻辑...... :(

1 = a
5 = e
27 = aa
28 = ab
etc...
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?我真的很不高兴,我不知道如何写这个...... :(

Kel*_*lly 20

这里有很长的清单:

/*
 * Convert an integer to a string of uppercase letters (A-Z, AA-ZZ, AAA-ZZZ, etc.)
 */
function num2alpha($n)
{
    for($r = ""; $n >= 0; $n = intval($n / 26) - 1)
        $r = chr($n%26 + 0x41) . $r;
    return $r;
}

/*
 * Convert a string of uppercase letters to an integer.
 */
function alpha2num($a)
{
    $l = strlen($a);
    $n = 0;
    for($i = 0; $i < $l; $i++)
        $n = $n*26 + ord($a[$i]) - 0x40;
    return $n-1;
}
Run Code Online (Sandbox Code Playgroud)

  • +1.虽然你需要在num2alpha中从$ n的初始值中减去1,而不是在alpha2num的最后减去1,以便匹配OP的规范1 = A. (2认同)

R. *_*des 6

我将添加这个答案来总结关于滥用base-26的评论.

面对这个问题时,常见的第一反应是认为"有26个字母,所以这必须是26个!我需要做的就是将每个字母映射到相应的数字".

但这不是基础26.很容易理解为什么:没有零!

在base-26中,26号是第一个带有两位数的数字,写成"10".在这个计数系统中,二十六个数字为"Z",第一个两位数字为二十七.

但是,如果我们使A = 0,...,Z = 25怎么办?这样我们得到零,第一个两位数字变为二十六.到现在为止还挺好.我们现在怎么写二十六个?这是"AA".但是......不是A = 0?哎呀!A = AA = AAA ="0"="00"="000".