我确实做了我认为的非代码审查传递黑客将一个二维数组从PHP传递给Javascript。外部数组包含元素,每个元素都是一个数组。
每个内部数组由我的数据库记录中的4个字段组成。内部数组元素是:城镇的名称,纬度和经度,以及整数索引。
代码是否有效?是。但我很讨厌这样一个事实:我99%确信,作为一个相当原始的初学者,有一个更好的方法来创建然后从PHP传递一个2d数组到Javascript我需要知道如何,因为我一起黑客攻击通过反复试验和阅读大量的SO帖子,并没有从先验的技术诀窍,智慧或信心中创造出来。
每个外部数组元素都是(需要)看起来像这样的数组:
热门 阵列
[0] = [“Campbell”,37.21,122.0,0]
[1] = [“Sunnyvale”,37.54,121.37,1]
[2] = [“Saratoga”,37.24,122.001,2]
[3] = ......等。等...........
请注意,第二级数组有一个字符串,然后是一个浮点数,然后是另一个浮点数,然后是一个整数。
这是PHP中的代码,它将我的数据库记录打包成一个二维PHP数组(错误检查,为清晰起见,未显示其他代码):
$result = mysql_query($query);
$numrows = mysql_num_rows($result);
$outerArray = array();
for($i = 0; $i < $numrows; $i++)
{
$theRow = mysql_fetch_row($result);
$city = $theRow[1];
$lat = $theRow[22];
$lng = $theRow[23];
$outerArray[] = array($city, $lat, $lng, $i);
}
$latLngValues = json_encode($outerArray);
// EDIT: ADDED TO TELL ME WHAT THIS 2d ARRAY ACTUALLY LOOKS LIKE
var_dump($latLngValues);
在我的网页的 onload 处理程序中,我调用了一个javascript函数并传递了这个数组:
<body onload='handleLoad(<?php echo $latLngValues ?>)'>
这是我的handleLoad():
function handleLoad( latLng2dArray )
{
for (var i = 0; i < latLng2dArray.length; i++)
{
var town = latLng2dArray[i];
var latitude = Number(town[1]);
var longitude = Number(town[2]);
// I USE THE DATABASE RECORD'S NUMBERS TO CREATE A Gmaps LatLng
var myLatLng = new google.maps.LatLng(latitude, longitude);
}
这可能是一种更清洁,更高效的方法。
例如,我发现如果我没有使用 Number()功能将我的数据库号码“强制”为一个数字,则调用“ new google.maps.LatLng (纬度,经度)“给了我 NaN 。
所以我希望更有经验的人能让我知道更清洁的方式。虽然这段代码有效,但我通过反复试验将其攻击了一天。
编辑:我在我的php代码中使用了一个var_dump()来查看2d数组“$ latLngValues”在传递给我的onload处理程序之前的样子,“$ latLngValues”看起来像这样: string(133) "[["Campbell","37.2724","-122",0],["Sunnyvale","37.2724","-122",1],["LosGatos","37.2607","-122",2],["Saratoga","37.2607","-122.046",3]]"
我想指出这一点:在我的数据库中,我使用的数据类型是纬度和经度的“浮动”。不确定var_dump如何/为什么将它们显示为字符串(不是浮点数),而整数索引被正确处理,而不是字符串。
答案 0 :(得分:0)
没有人提供更好的编码策略,所以现在,我将使用上面的现有代码 - 它不是很好但是有效。如果找到更正确的方法,我会回发。