次の関数を使用できます(私の個人的なフレームワークから適応したコード):
function Base($input, $output, $number = 1, $charset = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ')
{
if (strlen($charset) >= 2)
{
$input = max(2, min(intval($input), strlen($charset)));
$output = max(2, min(intval($output), strlen($charset)));
$number = ltrim(preg_replace('~[^' . preg_quote(substr($charset, 0, max($input, $output)), '~') . ']+~', '', $number), $charset[0]);
if (strlen($number) > 0)
{
if ($input != 10)
{
$result = 0;
foreach (str_split(strrev($number)) as $key => $value)
{
$result += pow($input, $key) * intval(strpos($charset, $value));
}
$number = $result;
}
if ($output != 10)
{
$result = $charset[$number % $output];
while (($number = intval($number / $output)) > 0)
{
$result = $charset[$number % $output] . $result;
}
$number = $result;
}
return $number;
}
return $charset[0];
}
return false;
}
基本的には、新しく生成された自動インクリメントIDをテーブルから取得して(これにより、衝突が生成されないようにすることもできます)、次のようにこの関数に渡す必要があります。
$short_id = Base(10, 62, $auto_increment_id);
1番目と2番目の引数は、それぞれ入力ベースと出力ベースを定義することに注意してください。
0-9a-zA-Z
また、例に準拠するために、文字セットを「デフォルト」から並べ替えました。
base_convert()
混合アルファベットケース(ベース36)なしで生活できる場合は、そのまま使用することもできます。