勢いだけで用途のあんまり見当たらない62進数まで扱えるbase_convert()を作ってみました。(正確には以前作っていたものをまともにした)
こういう実装の方法が最適なのかよくわからないですし、10進数と62進数間での変換しか試していないので、たぶんバグがあります。バグを見つけたら、コメントで知らせてください。がんばって修正してみます
function super_base_convert($number, $frombase, $tobase) { settype($number, 'string'); if($tobase==1 || $frombase==1 || $tobase>62 || $frombase>62) { return false; } elseif((2<=$tobase && $tobase<=36) && (2<=$frombase && $frombase<=36)) { return base_convert($number, $frombase, $tobase); } elseif($frombase==10) { $T_[0] = $number; for($i = 0; ; $i++) { $T_[$i+1] = floor($T_[$i]/$tobase); $c[$i] = $T_[$i] % $tobase; if($T_[$i+1]==0) { $r = $i; break; } } $variant = 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'); $converted = ''; for($i = count($c)-1; $i>=0; $i--) { $converted .= $variant[$c[$i]]; } return $converted; } elseif($tobase==10) { $variant = array('0' => '0', '1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', 'a' => '10', 'b' => '11', 'c' => '12', 'd' => '13', 'e' => '14', 'f' => '15', 'g' => '16', 'h' => '17', 'i' => '18', 'j' => '19', 'k' => '20', 'l' => '21', 'm' => '22', 'n' => '23', 'o' => '24', 'p' => '25', 'q' => '26', 'r' => '27', 's' => '28', 't' => '29', 'u' => '30', 'v' => '31', 'w' => '32', 'x' => '33', 'y' => '34', 'z' => '35', 'A' => '36', 'B' => '37', 'C' => '38', 'D' => '39', 'E' => '40', 'F' => '41', 'G' => '42', 'H' => '43', 'I' => '44', 'J' => '45', 'K' => '46', 'L' => '47', 'M' => '48', 'N' => '49', 'O' => '50', 'P' => '51', 'Q' => '52', 'R' => '53', 'S' => '54', 'T' => '55', 'U' => '56', 'V' => '57', 'W' => '58', 'X' => '59', 'Y' => '60', 'Z' => '61'); $converted = 0; for($i = 0; $i<strlen($number); $i++) { $converted += $variant[$number{$i}]*pow($frombase, strlen($number)-1-$i).' '.$i.'\n'; } return $converted; } else { return super_base_convert(super_base_convert($number, $frombase, 10), 10, $tobase); } }