PHP で任意の基数に変換できる base_convert という関数があることを知りました。
16進数/8進数/2進数と10進数を相互変換する関数は dechex decoct decbin がありますが、base_convert では任意の基数を指定できるため a-z を使った36進数も表現できます。
var_dump(base_convert('123456789', 10, 36)); // string(6) "21i3v9" var_dump('21i3v9', 36, 10); // string(9) "123456789"
戻り値は string 型である点に注意しましょう。加えて大きい数値を変換では精度が失われ不正な値になります。
// 32bit var_dump(base_convert(base_convert('9999999999999999', 10, 36), 36, 10)); // string(17) "10000000000000000" ... NG // 64bit var_dump(PHP_INT_MAX); var_dump(base_convert(base_convert(PHP_INT_MAX + 1, 10, 36), 36, 10)); // int(9223372036854775807) // string(16) "9223372036854818" ... NG // PHP_INT_MAX + 1 は (float) "9.2233720368548E+18" のため誤って変換される。