我正在为我正在学习 php 的项目编写一个 url 缩短函数,这是代码(顺便说一句,我想这global
不是一件好事:P):
$alphabet = array(1 => "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",
"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",
"0","1","2","3","4","5","6","7","8","9","_","-");
function shorten($id){
global $alphabet;
$shortenedId = "";
while($id>0){
$remainder = $id % 64;
$id = $id / 64;
$shortenedId = $alphabet[$remainder].$shortenedId;
}
return $shortenedId;
}
代码取自这篇 Wikipedia 文章 并改编为 php。我的问题是,当我将 64 的倍数传递给函数时,我得到了错误的(出于我的目的)结果,例如 128 返回的 b 不正确,它应该是 aaa,但对于 3 位数字来说太长了数字。
另外我开始认为这段代码有问题,如果我在$id
得到 nItOq 时通过 1'000'000'000'000... 我觉得这是错误的,因为像 bit.ly 这样的 url 缩短服务返回 6 number id 如果我使用它,我认为这个算法并不比他们的更好。
所以,两个问题:
- 你在上面的代码中发现任何错误吗?
- 如何管理 64-multiple ids?我是否必须忽略它们并传递给下一个?