试图在PHP中重现一些JavaScript代码,变量覆盖问题,如何
Trying to reproduce some JavaScript code in PHP, variable overwrite issue, how to?
我正试图在php中重现一些js代码。我不知道为什么我没有得到同样的结果。我认为js超过了php没有的一些变量(更确切地说是longitudeRange and latitudeRange
)。
php $range
与js CCD_。
有什么想法吗?
resp = encodeGeohash([34.2360444, -118.5284408]);
alert(resp);
function encodeGeohash (location) {
var g_BASE32 = "0123456789bcdefghjkmnpqrstuvwxyz";
var precision = 10;
var latitudeRange = {
min: -90,
max: 90
};
var longitudeRange = {
min: -180,
max: 180
};
var hash = "";
var hashVal = 0;
var bits = 0;
var even = 1;
while (hash.length < precision) {
var val = even ? location[1] : location[0];
var range = even ? longitudeRange : latitudeRange;
var mid = (range.min + range.max) / 2;
if (val > mid) {
hashVal = (hashVal << 1) + 1;
range.min = mid;
} else {
hashVal = (hashVal << 1) + 0;
range.max = mid;
}
even = !even;
if (bits < 4) {
bits++;
} else {
bits = 0;
hash += g_BASE32[hashVal];
hashVal = 0;
}
}
return hash;
};
php代码:
function geoHash($location)
{
$g_BASE32 = "0123456789bcdefghjkmnpqrstuvwxyz";
$precision = 10;
$latitudeRange = ['min' => -90, 'max' => 90];
$longitudeRange = ['min' => -180, 'max' => 180];
$hash = "";
$hashVal = 0;
$bits = 0;
$even = 1;
while (strlen($hash) < $precision) {
$val = $even ? $location[1] : $location[0];
$range = $even ? $longitudeRange : $latitudeRange;
$mid = ($range['min'] + $range['max']) / 2;
var_dump($range);
if ($val > $mid) {
$hashVal = ($hashVal << 1) + 1;
$range['min'] = $mid;
} else {
$hashVal = ($hashVal << 1) + 0;
$range['max'] = $mid;
}
$even = !$even;
if ($bits < 4) {
$bits++;
} else {
$bits = 0;
$hash .= $g_BASE32[$hashVal];
$hashVal = 0;
}
}
var_dump($hash);
return $hash;
}
geoHash([34.2360444, -118.5284408]);
分配时
var range = even ? longitudeRange : latitudeRange;
在javascript中,range引用一个对象。所以,当你以后分配时
range.min = mid;
它实际上改变了CCD_ 4或CCD_
相反,您的php代码在该位置使用一个数组,该数组使用写时复制,即当您分配$range['min'] = $mid;
时,它既不会影响$latitudeRange
也不会影响$longitudeRange
您可以使用对象
<?php
function geoHash($location)
{
$g_BASE32 = "0123456789bcdefghjkmnpqrstuvwxyz";
$precision = 10;
$latitudeRange = (object)['min' => -90, 'max' => 90];
$longitudeRange = (object)['min' => -180, 'max' => 180];
$hash = "";
$hashVal = 0;
$bits = 0;
$even = 1;
while (strlen($hash) < $precision) {
$val = $even ? $location[1] : $location[0];
$range = $even ? $longitudeRange : $latitudeRange;
$mid = ($range->min + $range->max) / 2;
if ($val > $mid) {
$hashVal = ($hashVal << 1) + 1;
$range->min = $mid;
} else {
$hashVal = ($hashVal << 1) + 0;
$range->max = $mid;
}
$even = !$even;
if ($bits < 4) {
$bits++;
} else {
$bits = 0;
$hash .= $g_BASE32[$hashVal];
$hashVal = 0;
}
}
return $hash;
}
var_dump(geoHash([34.2360444, -118.5284408]));
或者篡改php中的引用。
相关文章:
- 云代码(javascript)失败,原因是:{代码:1,消息:内部错误
- 简化此If语句,使其不会't重复代码-Javascript
- 十进制到二进制代码Javascript
- 第二次单击时执行不同的代码(JavaScript)
- 在不使用jquery($symbol)knockout.js的情况下分离代码javascript
- 缩短几个元素的onclick代码 - JavaScript
- 英国银行排序代码 JavaScript 正则表达式
- 我无法在谷歌图表的代码 javascript 中获取 json 数据(项目 Python Hello Dashboard
- 和代码 JavaScript 没有被 &.
- 我怎样才能减少这段代码 javascript 代码,这样它就不会那么重复了
- 我想单击一个按钮,一次只执行已经制作的程序中的一行代码.(JavaScript)
- 滑动 DIV 代码 Javascript 的小问题
- 尝试重写代码 JavaScript
- 是否可以检测到在不使用键代码 javascript 的情况下按下了输入键
- 输入网址代码 JavaScript 播放器
- 管理通用客户端代码(javascript/css)
- 理解代码javascript
- 加载json-url参数代码(javascript修改)
- 变量检查错误的代码(javascript)
- css属性仅由代码javascript应用