你可以嘗試base_convert從36到10,然後增加10到36.我沒有任何問題,像ZZZZZW+1
這樣的大數字,但正如它在php手冊中所說的那樣,浮動/雙精度。
<?php
echo "<pre>";
//orig string
$test = 'ZZZZZW';
//convert from base36 to number.
$test = base_convert($test, 36, 10);
var_dump($test);
//increment
$test++;
var_dump($test);
//convert back (and upper case)
$test = strtoupper(base_convert($test, 10, 36));
var_dump($test);
?>
輸出:
string(6) "ZZZZZW"
string(10) "2176782332"
float(2176782333)
string(6) "ZZZZZX"
example can be see here
除此之外,你可以做一些自定義的增量,甚至檢查出把一些較大的基地和值在PHP手冊的base_convert意見。澄清後
編輯:
Taken from the php comments page:
<?php
function intToAlphaBaseN($n,$baseArray) {
$l=count($baseArray);
$s = '';
for ($i = 1; $n >= 0 && $i < 10; $i++) {
$s = $baseArray[($n % pow($l, $i)/pow($l, $i - 1))].$s;
$n -= pow($l, $i);
}
return $s;
}
$base=array_merge(range('A','Z'), range(0,9));
$zero = $base[0];
//an integer number
$r=rand(0, 999999);
echo "$r converts to :".str_pad(intToAlphaBaseN($r,$base), 6, $zero, STR_PAD_LEFT)."\n";
//an integer number
$r++;
echo "$r converts to :".str_pad(intToAlphaBaseN($r,$base), 6, $zero, STR_PAD_LEFT)."\n";
//an integer number
$r++;
echo "$r converts to :".str_pad(intToAlphaBaseN($r,$base), 6, $zero, STR_PAD_LEFT)."\n";
?>
working example
至於從字符串ID遞增,我建議選擇保存的整數值,增加與和轉換或寫一個類似的函數來轉換爲整數,增量,轉換回來。前者可能更容易。
至於強制相同的6個字符格式,唯一一次這應該是一個問題是當你通過根據你的格式的Z99999,是最大的。
+1對於不重新發明輪子:) – Nicolas78 2012-02-06 22:36:57
我已經考慮過了,但它必須總是正好6個字符,並逐漸適合提到的格式。此外,baseconvert從0開始,而不是A,所以如果我確實從「621937810」(AAAAAA)開始,那麼下一次跳轉將在AAAAAZ之後並且開始到AAAAB0。實際上,這是我的第一個考慮。 – 2012-02-06 22:43:21
@OksanaMolotova然後你基本上是重新創建自己的基地。你將不得不做一些自定義增量。 base_convert評論頁面上有幾個選項允許您傳遞轉換字符的數組/字符串。這將允許您使用自己的自定義基礎進行轉換。例如:http://us.php.net/manual/en/function.base-convert.php#105990你可以改變數組在數字之前有字母......等等。至於正好是6個字符,請使用左側的鍵盤強制您的0字符(A)在左側。 – 2012-02-06 22:57:40