我想把一个很大的数字压缩成字母数字[0-9a-zA-Z]。当然,最简单的方法是使用一个内置的php函数base64_encode(),但是我很讨厌这个方法,它会产生额外的字符,比如“/”和“=”。更重要的是,base64_encode对压缩数字没有任何作用,因为这个函数把数字当作字符串。
我曾经考虑过另一个内置函数'base_convert()',但它只能将数字转换为字符集[0-9a-z],使结果更长。
我现在用一种廉价的方式来实现我的目标:
function compress_int($num) {
$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$result = '';
while( $num ) {
$mod = $num % 52;
$num = intval($num / 52);
$result .= $chars[$mod];
}
return $result;
}
然而,我认为这是非常低效的。所以我非常感谢谁能告诉我一个更好的方法与更高的效率。
4条答案
按热度按时间ldfqzlk81#
这是我以前为一个c++应用程序做的一个例子,欢迎使用。
简单地使用:
rt4zxlrg2#
为了补充Goran的答案,保存一些人的时间,下面是一个函数,它可以在转换后将int值返回给用户:
电话和Goran的一模一样
tvmytwxo3#
Goran的回答是完全正确的,但多年来PHP变得更加严格,并已略有改变的使用参考,所以要更新到今天的时间,我们可以用途:
此版本将使用严格类型。
t3irkdon4#
基于上述算法,我已经修复了它的工作非常长的数字,以及使用GMP .它有点更有效的代码,并共享编码/解码方式: