【发布时间】:2013-07-16 13:12:03
【问题描述】:
我在 javascript 中有这个功能 - 工作正常
// javascript
function myhash(str) {
var hash = 0;
if (str.length == 0) return hash;
for (var i = 0; i < str.length; i++) {
oneChar = str.charCodeAt(i);
hash = ((hash << 5) - hash) + oneChar;
hash &= hash;
}
return hash;
}
我正在尝试将此函数重写为 PHP,但是对于相同的输入,输出与来自 JS 的输出不同。
// php
function myhash($str) {
$hash = 0;
if (strlen($str) == 0) return $hash;
for ($i = 0; $i < strlen($str); $i++) {
$oneChar = ord($str[$i]);
$hash = (($hash << 5) - $hash) + $oneChar;
$hash &= $hash;
}
return $hash;
}
输入和输出示例:
console.log(myhash("example")); // output: -1322970774
echo myhash("example"); // output: 93166309738
有谁知道,问题可能出在哪里?它们看起来一样,但显然不是。
【问题讨论】:
-
你能举个例子吗?可能有助于确定问题
-
@Ian 不过,很高兴知道有什么不同。如果我遇到这种情况,我会开始在整个代码中添加
echos 之类的东西,看看差异首先出现在哪里 -
别忘了把例子改成使用myhash
-
有 2 个很好的工具可以显示您的问题 - phpfiddle.org 和 jsfiddle.net 可以让我们进行测试和帮助调试
-
在 JavaScript 中,在使用字符串“example”的第 6 次迭代中,
$hash << 5的结果是一个负数(96947249 << 5->-1192655328)。我不确定为什么。在 PHP 中,它是3102311968
标签: php javascript hash