Вообще-то это стандартный перевод из одной систему счисления, в данном случае десятичной, в другую, с основанием равным длине нового алфавита.
function myEncode($value, $alphabet, $length) {
$base = strlen($alphabet);
$encoded = '';
while ($length > 0 && $value > 0) {
$encoded = $alphabet[$value % $base].$encoded;
$value = ($value - $value % $base) /$base;
$length--;
}
while ($length > 0) {
$encoded = $alphabet[0].$encoded;
$length--;
}
return $encoded;
}
$alphabet = 'abcdefghijklmnopqrstuvwxyz';
echo myEncode(2, $alphabet, 3)."\n";
echo myEncode(555, $alphabet, 3)."\n";
Если алфавит и длина результата фиксированы, то можно и проще:
function myEncode_1($value) {
return chr(($value - $value % 676) / 676 + 97).
chr(($value % 676 - $value % 26) / 26 + 97).
chr($value % 26 + 97);
}
echo myEncode_1(2)."\n";
echo myEncode_1(555)."\n";