увеличивать альфа-числовые значения - PullRequest
4 голосов
/ 15 июля 2011

Как видно из названия, мне нужно сделать что-то вроде этого ...

$i++;//we all know this.

$value = 'a';

increment($value);// i need this functionality
//output 
string [ b ]

///here are some more samples, to help you understand...

increment('b'); //output// c
increment('z'); //output// A [capital A not fussy but would be good :) ]
increment('9'); //output// a1
increment('a1'); //output// a2
increment('aa1'); //output// aa2

и так далее ... UPDATE

ну скажем, я использую числовые значения $ ID ++; Я бы закончил с огромным числом событий 1310743942525; который может занять гораздо больше места, чем, скажем, `ab34c9" я пытаюсь сохранить длину символов для сохранения в БД ...

Ответы [ 3 ]

3 голосов
/ 15 июля 2011

Вы пытаетесь обработать его как базовое число 62:
http://www.pgregg.com/projects/php/base_conversion/base_conversion.php

с исходным кодом

http://www.pgregg.com/projects/php/base_conversion/base_conversion.inc.phps

, чтобы преобразовать его в десятичное число,инкремент и преобразовать его обратно в базу 62

ОБНОВЛЕНИЕ

Из того, как я прочитал код, вы можете получить рабочий процесс, подобный этому:

2 голосов
/ 15 июля 2011

Если все, что вы пытаетесь сделать, это сохранить пространство базы данных, учтите это.

В MySQL у вас может быть поле с типом UNSIGNED BIGINT. Максимальный размер этого поля - 18446744073709551615, а объем памяти - всего 8 байт.

Если бы вы конвертировали это число (1,844 x 10 ^ 19) в base-62, оно было бы представлено как LygHa16AHYF. Вам понадобится CHAR(11) (11 байт) или VARCHAR(11) (12 байт) для хранения преобразованного числа.

Если вы используете VARCHAR для типа поля, меньшие числа будут занимать меньше места, но для больших чисел это на самом деле больше. В любом случае, 8 байтов для огромного числа довольно минимальны. Я бы сэкономил усилия и просто сделал поле БД UNSIGNED BIGINT.

0 голосов
/ 15 июля 2011

Вы можете использовать коды ASCII каждой буквы.Это простой пример, который покажет вам идею, конечно, для этого нужно много модификаций, если вы хотите увеличить 'aa1' до 'aa2', но это невозможно - P просто нужно написать несколько условий.

function increment($value) 
{
  if(strlen($value)>1)
    return false; 

  $asciiCode = ord($value); 
  return chr($asciiCode + 1); 
}

http://www.asciitable.com/ - таблица кодов ASCII :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...