2010-02-19 49 views

回答

8

你將不得不存儲URL所以只是有一個表:

  • 網址:ID,網址

其中id是自動遞增序列和網址列索引。這樣每個URL都是唯一的。最簡單的方法是簡單地使用ID,但可以比此更短。

我的建議是將ID轉換爲基數62(10個數字,26個大寫字母,26個小寫字母= 62)或可能64個(添加_和 - )。

我的意思是1234是真的:

1×10 + 2×10 + 3×10 + 4×10

,並有一個相當簡單的算法,用於將數字轉換爲基本形式。因此,一個基座62 「數量」 是:

1234(基體10)= 19×62 + 56 X 62 0 = JQ

如果我的數學是正確的。

以下功能應該做你需要的。

$digits = range(0, 9) + range('A', 'Z') + range('a', 'z') 

function from10($base10) { 
    global $digits; 
    $ret = ''; 
    $nd = count($digits); 
    $n = $nd; 
    while ($base10 > 0) { 
    $r = $base10 % $n; 
    $ret .= $digits[$r]; 
    $n = (int)($base10/$n); 
    $n *= $nd; 
    } 
    return $ret; 
} 

function to10($baseN) { 
    global $digits; 
    $nd = count($digits); 
    $ret = 0; 
    $n = $nd; 
    for ($i=0; $i<strlen($baseN); $i++) { 
    $ret += $n * $baseN[$i]; 
    $n *= $nd; 
    } 
    return $ret; 
} 

from10()轉換1234 「QJ」(希望)和to10() 「QJ」 轉換爲1234,除非我的數學是關閉的。

這些數字實際上是以相反的順序存儲的(相當於「123」被寫爲「321」),因爲這樣更容易處理,並且不需要數字在任何特定位置訂購。

相關問題