簡體   English   中英

從 PHP 中的字符串創建唯一的 4 字節整數

[英]Create a unique 4-byte Integer number from a String in PHP

我有一個 SQL 表,它使用字符串作為鍵。 我需要使用 PHP 將該字符串(最多 18 個字符)轉換為唯一的 (!) 4 字節整數。 任何人都可以幫忙嗎?

獨特的? 不可能,對不起

讓我們仔細看看:

有 18 個字符,即使我們假設只有 128 個可能的 ASCII 字符(7 位),您也會得到 128^18 個可能的字符串(我什至不考慮更短的字符串的可能性!),大約8E37(8 和 37 個零)。

使用 4 字節整數,您將獲得 256^4 個可能的整數,大約為 4E9(40 億)。

所以,字符串比整數多大約 4E28 個; 你不能有一個唯一的映射。

所以,輸入第4294967297個key肯定會遇到沖突,但輸入多一個就有可能遇到沖突。

另見: http : //en.wikipedia.org/wiki/Pigeonhole_principle

將字符串查找表保留為整數。 每次遇到新字符串時,都將其添加到映射表中並為其分配一個新的唯一 ID。 這將適用於大約 2^32 個字符串,這可能就足夠了。

對於超過 2^32 個不同的字符串,沒有辦法做到這一點。

你不能。 一個四字節整數可以表示 2^32 = 40 億個值,這不足以容納您的目標空間。

如果當前表中的行少於 40 億行,則可以創建一個交叉表,為每個行分配一個增量值。 使用這種方法,您將被限制為 40 億行,但這可能適合您的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM