我正在寻找JAVA的PHP equelent
"SomeString".hashCode();
Run Code Online (Sandbox Code Playgroud)
功能.我正在寻找的hashCode应该与用于在PHP中索引Hashmaps的相同.我希望你能帮帮我 :)
编辑:
好的,发现我正在寻找用C语言编写的函数,并且在PHP本身不可用,但感谢您的帮助!
ulong zend_inline_hash_func(char *arKey, uint nKeyLength)
{
ulong $h = 5381;
char *arEnd = arKey + nKeyLength;
while (arKey < arEnd) {
$h += ($h << 5);
$h += (ulong) *arKey++;
}
return $h;
}
Run Code Online (Sandbox Code Playgroud)
小智 7
Arkh和guiguoz引用的github解决方案是正确的方向,但两者都没有考虑到PHP一旦超过2 ^ 61就会将整数哈希值上转换为double.使用固定硬件32位有符号值计算的java函数涉及32位算术溢出(CPU固有),以将值保持为32位有符号整数.
在PHP中,每次更新$ hash时,您都需要手动执行该算术溢出:
function overflow32($v)
{
$v = $v % 4294967296;
if ($v > 2147483647) return $v - 4294967296;
elseif ($v < -2147483648) return $v + 4294967296;
else return $v;
}
function hashCode( $s )
{
$h = 0;
$len = strlen($s);
for($i = 0; $i < $len; $i++)
{
$h = overflow32(31 * $h + ord($s[$i]));
}
return $h;
}
Run Code Online (Sandbox Code Playgroud)
(编辑:更正%v错字)
| 归档时间: |
|
| 查看次数: |
7722 次 |
| 最近记录: |