私は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
誰が知っていますか、どこに問題があるのでしょうか? それらは同じように見えますが、明らかにそうではありません。