对于我的最新项目,我需要缩短 URL,然后将其放入 mysql 数据库中。 我现在遇到了一个问题,因为我不知道如何解决这个问题。基本上,缩短的字符串应该是这样的(我想包括小写字母、大写字母和数字)
a
b
...
z
0
...
9
A
...
Z
aa
ab
ac
...
ba
所以,1. URl --> a.存储在mysql中。 下一次,一个新的 url 被存储到 --> b 因为 a 已经在 mysql 数据库中。
就是这样。但我不知道。你们谁能帮帮我吗?
编辑:格式化和进一步解释。
它有点像 imgur.com URL 缩短服务。它应该像这样一直持续到无穷大(我认为这是不需要的......)
最佳答案
您可以使用以下函数 (code adapted from my personal framework):
function Base($input, $output, $number = 1, $charset = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ')
{
if (strlen($charset) >= 2)
{
$input = max(2, min(intval($input), strlen($charset)));
$output = max(2, min(intval($output), strlen($charset)));
$number = ltrim(preg_replace('~[^' . preg_quote(substr($charset, 0, max($input, $output)), '~') . ']+~', '', $number), $charset[0]);
if (strlen($number) > 0)
{
if ($input != 10)
{
$result = 0;
foreach (str_split(strrev($number)) as $key => $value)
{
$result += pow($input, $key) * intval(strpos($charset, $value));
}
$number = $result;
}
if ($output != 10)
{
$result = $charset[$number % $output];
while (($number = intval($number / $output)) > 0)
{
$result = $charset[$number % $output] . $result;
}
$number = $result;
}
return $number;
}
return $charset[0];
}
return false;
}
基本上你只需要从你的表中获取新生成的自动递增的 ID(这也确保你不会产生任何冲突)并将它传递给这个函数,如下所示:
$short_id = Base(10, 62, $auto_increment_id);
请注意,第一个和第二个参数分别定义了输入和输出基数。
此外,我已经从“默认”0-9a-zA-Z
中重新排序字符集以符合您的示例。
如果你可以不用混合字母大小写(base 36),你也可以只使用 base_convert()
。
关于php - MySQL/PHP,但更多的是数学问题(缩短脚本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7492827/