2011-07-15 51 views
4

就像標題所暗示的,我需要做一些事情是這樣的...增量阿爾法值數值

$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 ++; 我會以一個巨大的數字eventuall 1310743942525; 它可以佔用更多的空間比說'ab34c9'即時試圖保存字符的長度來保存分貝...

+1

你能爲你提供一個更好的地圖嗎? a-b,然後是A-Z,然後是0-9,那麼是什麼?我看到你有9到1,但我不太瞭解你的模式。 – Brad

+0

你試圖完成什麼?也許更好地瞭解問題,可以有一個更簡單的解決方案。 – AndrewR

回答

3

您試圖將其作爲基數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

UPDATE

從我如何閱讀代碼,你可以有這樣的工作流程:

$value = 'ab8Zb'; 
$value_base10 = base_base2dec($value, 62); 
$value_base10++; 
$value = base_dec2base($value_base10, 62); // should be 'ab8Zc' 
+0

有一點需要注意的是,9將映射到a,而不是a1。 –

+0

它看起來很有前途,只有當我能弄清楚在函數屬性中輸入什麼:)或者如何使用它:) – Val

+0

嗯,它看起來好像不會超過第7位數字,我會嘗試ñ看看有多少值你擺脫了6日:) – Val

0

你可以使用每個字母的ascii代碼這只是一個簡單的例子,會告訴你的想法,如果你想增加「AA1」爲「AA2」,但不可能是理智最多ofcourse它需要大量的modyfications的,P你只需要編寫一些條件

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

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

http://www.asciitable.com/ - ASCII碼錶:)。

+0

這不適用於OP的樣本。 – webbiedave

+0

他們不必是'aa2'只是希望它每次增加一個......它的相似數字有一個10位數的基數,字母數字可以有一個36位的基數......如果這是有道理的 – Val

+0

正如我所說的,這種方法需要大量的語言和許多編碼來處理超過1個字符的$值。 –

2

如果你所要做的只是保存數據庫空間,請考慮這一點。

在MySQL中,您可以使用類型爲UNSIGNED BIGINT的字段。該字段的最大大小爲18446744073709551615,存儲空間僅爲8個字節。

如果要將此數字(1.844 x 10^19)轉換爲基數62,則它將表示爲LygHa16AHYF。您需要一個CHAR(11)(11個字節)或一個VARCHAR(11)(12個字節)以存儲轉換的數字。

如果您使用VARCHAR作爲字段類型,較小的數字將佔用較少的空間,但對於較大的數字,它實際上需要更多的空間。無論如何,8個字節對於一個龐大的數字來說是非常小的我會節省這些努力,並使數據庫字段爲UNSIGNED BIGINT

+0

8bytes * 10 000條記錄將加起來我的朋友,這只是身份證,而我的客戶有5K用戶已經單純的ID會使這個噩夢:) – Val

+0

如果你只是在談論5k-10k ID(我假設他們都是順序的),然後使用'UNSIGNED SMALLINT',它只有2個字節,最大值爲'65535'。如果超出這個範圍,只需將數據類型更改爲「UNSIGNED MEDIUMINT」,即3個字節並上升到16777215。 – AndrewR

+0

我知道你的意思,我曾考慮過這個問題,事實是它很複雜,它可能是每天可能容納數百萬條記錄的東西 – Val