从PHP中的String创建唯一的4字节整数

时间:2012-02-27 18:13:36

标签: php string integer unique

我有一个SQL表,它使用字符串作为密钥。我需要使用PHP将该字符串(最多18个字符)转换为唯一的(!)4字节整数。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

唯一?不可能,抱歉

让我们仔细看看:

有18个字符,即使我们假设只有128个可能的ASCII字符(7位),你也会得到128 ^ 18个可能的字符串(我甚至不会考虑更短字符串的可能性!),大概是8E37(8和37个零)。

使用4字节整数,你得到256 ^ 4个可能的整数,大约是4E9(40亿)。

所以,你有大约4E28个字符串而不是整数;你不能拥有独特的地图。

因此,一旦输入4294967297th键,您肯定会遇到碰撞,但只要输入多个键就可以碰到碰撞。

另请参阅:http://en.wikipedia.org/wiki/Pigeonhole_principle

答案 1 :(得分:0)

将字符串的查找表保留为整数。每次遇到新字符串时,都会将其添加到映射表中并为其分配新的唯一ID。这将适用于大约2 ^ 32个字符串,这可能就足够了。

对于更多2 ^ 32个不同的字符串,没有办法做到这一点。

答案 2 :(得分:0)

你不能。一个四字节整数可以表示2 ^ 32 = 40亿个值,这不足以容纳目标空间。

如果表中当前的行数少于40亿,则可以创建一个只为每个行分配增量值的交叉表。使用这种方法,您可以限制为40亿行,但这可能适用于您的情况。