2013-09-27 3 views
6

Я хочу преобразовать число в строку с 5 символами. Строковые символы: a-z, A-Z и 0-9. Каждая комбинация этого кода увеличивается на «1»Преобразование числа в 5-разрядную строку

Я не знаю, как это объяснить, поэтому я приведу вам пример. Например

1 = aaaaa 
26 = aaaaz 
27 = aaaaA 
52 = aaaaZ 
53 = aaaa0 
62 = aaaa9 
63 = aaaba 
89 = aaabz 
90 = aaab0 

Так что, если у меня был номер 1035, есть способ PHP может вычислить код для этого?

Извините, мой вопрос немного расплывчатый.

Причина, по которой я хочу это сделать, состоит в том, что я не хочу показывать идентификатор первичного ключа базы данных, я хочу показать этот формат base63.

+5

Sure. То, что вы создали, представляет собой обычную базовую систему нумерации, которая идет a-zA-Z0-9. Я полагаю, что это фактически базовая система нумерации. Используя числа, которые ваш пример показал бы: 63 = 00010 Предостережение заключается в том, что a служит в качестве примера 1 И 0. aaaaa = 1, где в реальной системе нумерации, основанной на повторной основе, было бы _ _ _ a = 1. –

+0

Думаю, я понимаю, что вы имеете в виду. У вас есть какие-то ресурсы, чтобы я мог больше узнать об этом? –

+1

Конвертируйте свой номер на базу 63 нормально. Затем преобразуйте каждую цифру в результат в те, которые вы используете, используя 'strtr()'. – Barmar

ответ

1

Я думаю, вы могли бы сделать что-то вроде этого:

function custom_base_62($n) 
{ 
    if ($n < 1) 
     trigger_error('custom_base_62(): This silly system cannot represent zero.', E_USER_ERROR); 

    $n -= 1; 
    $symbols = array_merge(range('a', 'z'), range('A', 'Z'), range(0, 9)); 
    $r = ''; 

    while ($n) 
    { 
     $r = $symbols[$n % 62] . $r; 
     $n = floor($n/62); 
    } 

    return str_pad($r, 5, $symbols[0], STR_PAD_LEFT); 
} 
+0

Вы все еще считаете это глупым, потому что 0 не разрешено в базах данных MySQL? И откуда это происходит? –

+1

Мы обсуждаем двух разных зверей. 1 математически не самое низкое положительное целочисленное значение, которое вы можете иметь, и это имеет отношение к базовым преобразованиям. С другой стороны, столбцы MySQL auto_increment начинаются с 1, чтобы присваивать идентификатор вашим строкам, но они могут быть равны нулю, если вы его заставляете. И таким же образом нулевое заполнение 1 будет 00001, логическое преобразование 1 в вашей базе должно быть 'aaaab'. – Havenard

+0

Теперь я изменю ваш код, чтобы разрешить 0 :) –

1

Вот идея, которую вы можете играть, не полностью уверен, что я понимаю вашу точной цели ..

<?php 

function Digit_to_char($s){ 

    $s1 = str_split($s); 
    while(list($k,$v) = each($s1)){ 
    $s2[] = str_replace(range(0,9), array("a","b","c","d","e","f","g","h","y","z"), $v); 
    } 

    return implode('',$s2); 
} 


echo Digit_to_char(12345); // prints bcdef 

?> 
Смежные вопросы