我是想实现62进制的功能,可是下面这段代码只能echo出来,不能返回,不知道是什么原因,求高手解答
function dwz($id,$str=""){
$a=array("0","1","2","3","4","5","6","7","8","9","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");
$zs=(int)($id/sizeof($a));
$xs=$id%sizeof($a);
if($zs>=sizeof($a)){
$str=$a[$xs].$str;
dwz($zs,$str);
}
else{
if($str==""){
return $a[$zs].$a[$xs];
}
else{
echo $a[$zs].$str;//这里只能输出
return $a[$zs].$str;//返回没值,不知道什么原因
}
}
}
for($i=999990;$i<=1000000;$i++){
echo dwz($i);
echo "<br>";
}
逻辑菜鸟简单的
function dwz($id,$str=""){
$a=array("0","1","2","3","4","5","6","7","8","9","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");
$zs=(int)($id/sizeof($a));
$xs=$id%sizeof($a);
if($zs>=sizeof($a)){
$str=$a[$xs].$str;
dwz($zs,$str);
}
else{
if($str==""){
return $a[$zs].$a[$xs];
}
else{
echo $a[$zs].$str;//这里只能输出
return $a[$zs].$str;//返回没值,不知道什么原因
}
}
}
for($i=999990;$i<=1000000;$i++){
echo dwz($i);
echo "<br>";
}
逻辑菜鸟简单的
没有承接返回
$str = dwz($zs,$str);函数结束处还需要有 return $str;
if($zs>=sizeof($a)){
$str=$a[$xs].$str;
dwz($zs,$str); //这里加入return: return dwz($zs, $str);
}
echo convert_62('4C8s', 1); //999990function convert_62($s, $mode=0) {
$d = str_split('0123456789ABCDEFGHIJKLMNOPQRSTUVEXYZabcdefghijklmnopqrstuvwxyz');
$r = '';
if($mode) {
$d = array_flip($d);
for($i=0; $i<strlen($s); $i++) $r = bcmul($r, '62') + $d[$s{$i}];
}else {
while($s) {
$r = $d[bcmod($s, '62')] . $r;
$s = bcdiv($s, '62');
}
}
return $r;
}
不好意思,请问下为什么我把这个文件放在本地测试可以用,但是放在服务器上不能用,会提示找不到bcmod这个函数
你还可以检查一下 php_gmp 扩展是否已加载,用这个函数库也是一样的
看看都有些什么
(
[0] => date
[1] => libxml
[2] => openssl
[3] => pcre
[4] => zlib
[5] => ctype
[6] => curl
[7] => dom
[8] => filter
[9] => ftp
[10] => gd
[11] => hash
[12] => iconv
[13] => json
[14] => mbstring
[15] => mcrypt
[16] => mhash
[17] => mysql
[18] => SimpleXML
[19] => SPL
[20] => PDO
[21] => posix
[22] => Reflection
[23] => session
[24] => pdo_sqlite
[25] => sockets
[26] => SQLite
[27] => standard
[28] => tokenizer
[29] => xml
[30] => xmlreader
[31] => xmlwriter
[32] => zip
[33] => apache2handler
[34] => memcache
[35] => mssql
[36] => soap
[37] => Zend Optimizer
)
function dwz($id,$str=""){
$a=array("0","1","2","3","4","5","6","7","8","9","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");
$zs=(int)($id/sizeof($a));
$xs=$id%sizeof($a);
if($zs>=sizeof($a)){
$str=$a[$xs].$str;
$str=dwz($zs,$str);
}
else{
if($str==""){return $a[$zs].$a[$xs];}
else{return $a[$zs].$str;}
}
return $str;
}
这是我根据你的提示改的,可以显示出来,但是我之前的算法有错,帮忙看下
$d = str_split('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVEXYZ');
$r = '';
while($s) {
$r = $d[(int)($s%62)].$r;
$s = (int)($s/62);
}
return $r;
}