murmurhash的php实现
MurmurHash PHP 实现
MurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作。以下是 PHP 的实现方式:
方法一:使用内置函数
PHP 没有直接提供 MurmurHash 的实现,但可以通过扩展或用户自定义函数实现。以下是 MurmurHash3 的 PHP 实现代码:
function murmurhash3($key, $seed = 0) {
$key = (string)$key;
$len = strlen($key);
$h1 = $seed;
$c1 = 0xcc9e2d51;
$c2 = 0x1b873593;
$i = 0;
while ($i <= $len - 4) {
$k1 = ord($key[$i]) | (ord($key[$i + 1]) << 8) | (ord($key[$i + 2]) << 16) | (ord($key[$i + 3]) << 24);
$k1 = $k1 * $c1;
$k1 = ($k1 << 15) | ($k1 >> 17);
$k1 = $k1 * $c2;
$h1 ^= $k1;
$h1 = ($h1 << 13) | ($h1 >> 19);
$h1 = $h1 * 5 + 0xe6546b64;
$i += 4;
}
$k1 = 0;
switch ($len - $i) {
case 3:
$k1 ^= ord($key[$i + 2]) << 16;
case 2:
$k1 ^= ord($key[$i + 1]) << 8;
case 1:
$k1 ^= ord($key[$i]);
$k1 = $k1 * $c1;
$k1 = ($k1 << 15) | ($k1 >> 17);
$k1 = $k1 * $c2;
$h1 ^= $k1;
}
$h1 ^= $len;
$h1 ^= ($h1 >> 16);
$h1 = $h1 * 0x85ebca6b;
$h1 ^= ($h1 >> 13);
$h1 = $h1 * 0xc2b2ae35;
$h1 ^= ($h1 >> 16);
return $h1;
}
方法二:使用扩展
如果需要高性能的 MurmurHash 实现,可以安装 PHP 扩展如 murmurhash。以下是安装步骤:
- 下载扩展源码:
git clone https://github.com/kjdev/php-ext-murmurhash.git - 编译安装:
cd php-ext-murmurhash phpize ./configure make sudo make install - 在
php.ini中添加:extension=murmurhash.so - 重启 PHP 服务。
安装后可直接调用 murmurhash 函数:
$hash = murmurhash("input string");
方法三:使用第三方库
可以使用 Composer 安装第三方库如 lastguest/murmurhash:
composer require lastguest/murmurhash
使用示例:

require 'vendor/autoload.php';
use lastguest\Murmur;
$hash = Murmur::hash3("input string");
注意事项
- MurmurHash 是非加密哈希,不适用于安全场景。
- 不同版本的 MurmurHash(如 MurmurHash2 和 MurmurHash3)算法不同,需根据需求选择。
- 32 位和 64 位系统可能产生不同结果,需注意一致性。






