2009-09-08 86 views
3

我需要一個獨特的內部int來使用,它將代表幾個隨機內容類型,我無法將其作爲類常量或配置選項進行硬編碼。然而,當我可以用更容易的術語「發佈」時,我不想提及「2」。所以儘管有一種方法可以從一個字符串中獲取INT值,這對於一些項目來說似乎可以非常有效地發揮作用。將字符串轉換爲唯一的數值在php

有沒有辦法做到這一點在PHP而不是我所建?

$strings = array('post', 'comment', 'blog', 'article', 'forum', 'news', 'page'); 

foreach($strings as $string) { 

    print $string . ' = '; 

    $string = str_split($string); 
    $sum = 0; 
    foreach($string as $char) { 
     $sum += ord($char); 
    } 

    var_dump($sum); 

    print '<br />'; 
} 

這與用戶輸入無關,所以不要擔心設計中的明顯缺陷。

:編輯:

我需要在快看看UPS數據庫中存儲數字索引。即從「物品」或「新聞」中告知「帖子」。然而我不知道這些1-8種類型的內容將被調用,所以我不能在應用程序中將這些內容硬編碼爲常量。因此,我認爲最好的辦法就是創建每個單詞的數字版本(這意味着檢查以確保兩個單詞不總和爲相同的數字)。

如果這是一個系統將有超過8個單詞,那麼這種方法註定要失敗的概率總和衝突。另外,如果我有選擇知道將使用哪些單詞,那麼這也將是可怕的設計,因爲類常量會更好。

+0

你爲什麼不使用MD5哈希例如?(如果你不需要一個號碼) – yoda 2009-09-08 02:32:02

回答

9

您可以使用crc32,這是一個校驗和函數,它只是返回一個4字節的整數。

+0

這真棒,沒有什麼可以更簡單。 – Xeoncross 2009-09-09 17:52:39

+0

+1謝謝,我特地尋找一個4字節的整數;任何其他小的結果都可以達到8字節,但這是完美的。 – 2015-06-08 01:33:59

0
$strings = array('post' => 0, 'comment' => 1, 'blog' => 2, 'article' => 3, 'forum' => 4, 'news' => 5, 'page' => 6); 

$s = 'comment'; 
$s_as_int = $strings[$s]; 
+0

「然而,我不想引用」2「,當我可以使用更容易的術語」後「」 – yoda 2009-09-08 02:35:28

+0

是啊,你可以使用'後'所有你想要的,然後當你需要整數$ strings ['post'] – JasonWoof 2009-09-08 02:53:29

+0

基本上,我在這裏建議的是,你可以使用字典來將字符串映射爲整數。你也可以使用一個常規數組,而不是$ strings ['post']來轉換爲int,你可以使用array_search('post',$ strings)。當你添加需要輸入的新單詞時,只需將它們推到$ strings的末尾 – JasonWoof 2009-09-08 02:57:10

1

您不能使用單個唯一整數,因爲兩個不同的整數有很高的相加結果的機會。 3 + 3 = 6; 2 + 2 + 2 = 6;

你最好使用不可逆散列。這更多的是一個獨特的序列,然後是序列的總和。

即:MD5(),SHA1(),SHA256()等

您還可以使用PHP5的spl_object_hash(),它獨特的哈希分配到每個對象。 http://us3.php.net/manual/en/function.spl-object-hash.php

ps:如果你需要整數,你會使用真正的大整數。因此,您可以只連接示例中的整數,而不是添加它們。

0
<?php 
$strings = array('post', 'comment', 'blog', 'article', 'forum', 'news', 'page'); 

foreach($strings as $string) 
{ 
    echo $string . ' = ' . base_convert(md5($string), 16, 10) . '<br />'; 
} 
?> 
0

難道你只是array_flip()array_search()你的字典?

或將您的數據庫字典以及名爲dictionary另一個表看起來像這樣(MySQL的)

CREATE TABLE `dictionary` (
    `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    `word` VARCHAR(25), 
    UNIQUE `word` (`word`) 
) 
+0

不是真的,我沒有一連串的單詞,我也不知道他們會是什麼。我之後的開發人員將創建其中的一些。 – Xeoncross 2009-09-10 15:03:54