Php 将数字转换为5位字符串

Php 将数字转换为5位字符串,php,design-patterns,Php,Design Patterns,我想把一个数字转换成5个字符的字符串。字符串为a-z、a-z和0-9。该代码的每个组合递增“1” 我不知道如何解释,所以我要给你们举个例子。 比如说 1 = aaaaa 26 = aaaaz 27 = aaaaA 52 = aaaaZ 53 = aaaa0 62 = aaaa9 63 = aaaba 89 = aaabz 90 = aaab0 所以,如果我有1035,有没有一种方法PHP可以计算代码呢 对不起,我的问题有点模糊 我之所以要这样做,是因为我不想显示我的数据库主键id,我想显示此b

我想把一个数字转换成5个字符的字符串。字符串为a-z、a-z和0-9。该代码的每个组合递增“1”

我不知道如何解释,所以我要给你们举个例子。 比如说

1 = aaaaa
26 = aaaaz
27 = aaaaA
52 = aaaaZ
53 = aaaa0
62 = aaaa9
63 = aaaba
89 = aaabz
90 = aaab0
所以,如果我有1035,有没有一种方法PHP可以计算代码呢

对不起,我的问题有点模糊


我之所以要这样做,是因为我不想显示我的数据库主键id,我想显示此base63格式。

这里有一个想法,您可以使用,但我不能完全确定我是否理解您的确切目标

<?php

function Digit_to_char($s){

  $s1 = str_split($s);
  while(list($k,$v) = each($s1)){
    $s2[] = str_replace(range(0,9), array("a","b","c","d","e","f","g","h","y","z"), $v);
  }

  return implode('',$s2);
}


echo Digit_to_char(12345); // prints bcdef

?>

我想你可以这样做:

function custom_base_62($n)
{
    if ($n < 1)
        trigger_error('custom_base_62(): This silly system cannot represent zero.', E_USER_ERROR);

    $n -= 1;
    $symbols = array_merge(range('a', 'z'), range('A', 'Z'), range(0, 9));
    $r = '';

    while ($n)
    {
        $r = $symbols[$n % 62] . $r;
        $n = floor($n / 62);
    }

    return str_pad($r, 5, $symbols[0], STR_PAD_LEFT);
}
功能自定义基础62($n)
{
如果($n<1)
触发器错误('custom_base_62():这个愚蠢的系统不能表示零',E_USER_error);
$n-=1;
$symbols=array_merge(范围('a','z')、范围('a','z')、范围(0,9));
$r='';
而(n美元)
{
$r=$symbols[$n%62]。$r;
$n=地板($n/62);
}
返回str_pad($r,5,$symbols[0],str_pad_LEFT);
}

当然可以。您所创建的是一个自定义的基本编号系统,它是a-zA-Z0-9。我想这实际上是一个基本的63号系统。使用数字,您的示例将显示:63=00010警告是,在您的示例中,a用作1和0。aaaaa=1,在一个真正的基于re的编号系统中,它应该是___a=1。我想我理解你的意思。你有什么资源让我能读到更多吗?把你的数字转换成63为基数。然后使用
strtr()
.OP-通读此链接,看看它是否更有意义,将结果中的每个数字转换为您正在使用的数字。基数2、8和16是常用的,因此有很多例子。@PeterStuart您的第一步是将其转换为基数63,然后将其转换为字符的正确表示形式。我在基数16或基数2上提供的链接应该会有所帮助。这是另一个好的链接:这实际上有一个Calc和代码示例,正好是你想要的。你仍然认为它是愚蠢的,因为0是不允许在MySQL数据库中的吗?这就是数字的来源?我们正在讨论两种不同的动物。1在数学上不是可以得到的最小正整数值,这与基转换有关。另一方面,MySQL auto_increment列将以1开头,将identity属性赋予行,但如果强制执行,则它们可以为零。同样,零填充1是00001,基中1的逻辑转换应该是
aaaab