Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 自动增加字母/数字,如INT_Php_Mysql_Auto Increment - Fatal编程技术网

Php 自动增加字母/数字,如INT

Php 自动增加字母/数字,如INT,php,mysql,auto-increment,Php,Mysql,Auto Increment,我需要一个函数来增加数据库中每个输入的“字母/数字”。 就像人工智能的INT数据 我需要这个来制作一个短链接代码,比如site.com/1gHrT 你知道怎么做吗?也许你想要的是这样的东西 function randLetter() { return chr(97 + mt_rand(0, 25)); } 来源:您可以使用给定字符将数字转换为字符串,就像您使用以下算法将一个系统中的数字转换为另一个系统中的数字一样 $n = 123; //your number $chars = "abcde

我需要一个函数来增加数据库中每个输入的“字母/数字”。 就像人工智能的INT数据

我需要这个来制作一个短链接代码,比如
site.com/1gHrT


你知道怎么做吗?

也许你想要的是这样的东西

function randLetter()
{
return chr(97 + mt_rand(0, 25));
}

来源:

您可以使用给定字符将数字转换为字符串,就像您使用以下算法将一个系统中的数字转换为另一个系统中的数字一样

$n = 123; //your number

$chars = "abcdefghijklmnopqrstuvwxyz";
$chars = "0123456789" . strtoupper($chars) . $chars;
$b = strlen($chars);
$nums = array();
while ($n > 0) {
    $nums[] = $n % $b;
    $n = (int)($n / $b);
}

$nums = array_reverse($nums);
$out = "";
foreach ($nums as $num) {
    $out .= $chars[$num];
}

在内部,您可以使用数字计数器,并使用此算法生成输出。

URL缩写器通常在base62中使用大整数

整数通常以10为基数(这是十进制的另一个单词,即
[0-9]
)。还有其他常见系统,如base2(
[0-1]
)、base8([
0-8]
)和base16(
[0-f]

当您使用base10以上时,通常使用英文小写字母(
[a-z]
)。因此,base16是
[0-9a-f]
0123456789abcdef
)。如果将基数推到数字和小写字母可以处理的范围之外,则通常使用大写字母(
[A-Z]
)。因此,base62使用
[0-9a-zA-Z]

在PHP中,
base\u convert()
函数可以处理从base2到base36(或
[0-1]
[0-9a-z]
的任何内容)

如果你想超越base36,那么你需要扩展它。如果您没有安装
gmp
扩展,那么您应该能够在互联网络上访问。另外,虽然
base64_encode()
函数听起来可能相关,但在本例中并非如此。它对数据进行编码,这与更改基(或)不同

不过,您需要记住,base62在web上可能有点脆弱。这是因为小写和大写字母都有意义。换句话说,如果某个聪明人或女孩更喜欢小写URI,并将其转换为小写,那么URI将指向错误的位置。从这个意义上讲,base36安全得多,但是URI不会那么短(尽管不会那么短)

现在,如果你想增加你帖子中的数字,那么只需将其转换为base10,增加它,然后再转换回来

如果我们假设它确实在base62中,那么我们可以使用
gmp
函数:

function base62_increment($number, $incrBy = 1) {
    if ( ! defined('GMP_VERSION'))
        throw new \Exception(__FUNCTION__.' needs the GMP extension');
    $number = gmp_init($number, 62);
    $number = gmp_add($number, $incrBy);
    return gmp_strval($number, 62);
}
$base62 = '1gHrT';
$incremented = base62_increment($base62);
var_dump($base62, $incremented);
如果您想使用base36,或者您没有安装
gmp
扩展,那么我们可以使用
base\u convert()


就是这样。

未经测试,可能会进行优化以避免转换,但这会将数字转换为数字,但会将顺序整数转换为字符串

$startval = 12435;
$maxval = 12654;

for ($i = $startval; $i < maxval; $i++) {
    $strINT = strval($i); // convert int to string
    // intialize final string to empty
    $strOutput = '';
    /* Loop through each letter */
    foreach (explode($strINT) as $letter) {
        // add 65 to each letter and turn it into a letter
        // letter A is character 65
        $strOutput .= chr(intval($letter) + 65);
    }
}
$startval=12435;
$maxval=12654;
对于($i=$startval;$i
这看起来不像增量字符串,这看起来像某种随机字符串。那么
1gHrT
之后是什么呢<代码>1gHrU?字符串不应该是随机的吗?
$startval = 12435;
$maxval = 12654;

for ($i = $startval; $i < maxval; $i++) {
    $strINT = strval($i); // convert int to string
    // intialize final string to empty
    $strOutput = '';
    /* Loop through each letter */
    foreach (explode($strINT) as $letter) {
        // add 65 to each letter and turn it into a letter
        // letter A is character 65
        $strOutput .= chr(intval($letter) + 65);
    }
}