包含数组的Javascript数组

时间:2014-05-23 15:52:48

标签: javascript arrays google-maps-api-3

我有两个已经由forloop填充的Javascript数组。

我现在想要将这两个数组分配给一个新数组。但是,在另一个函数中调用这两个数组。所以,我想将包含两个数组的函数分配给一个新数组。

这个想法是使用while循环用两个现有数组填充新数组。

难点在于浏览器似乎不喜欢为google.maps函数分配数组:例如:myarray[i] = (google.maps.LatLng(array1[i],array2[i]))

这是整个代码......出错的实际位包含在代码末尾的while循环中(其余部分在while循环正常工作之前)。

    while($row = mysqli_fetch_array($marker_result)) {

     $marker_location[] = $row["location"];
     $marker_lat[] = $row["lat"];
    $marker_lng[] = $row["lng"];

} //End of while loop

?>

<script>

//Converting php marker arrays to javascript marker arrays for use in for loop
     var js_markerloc_array= <?php echo json_encode($marker_location ); ?>;
    var js_markerlat_array= <?php echo json_encode($marker_lat ); ?>;
    var js_markerlng_array= <?php echo json_encode($marker_lng ); ?>;
    var markerloc_array = new Array(js_markerloc_array.length);
    var markerlat_array = new Array(js_markerloc_array.length);
    var markerlng_array = new Array(js_markerloc_array.length);

    for(var i=0; i<js_markerloc_array.length; i++){
            var jsloc = js_markerloc_array[i];
        var jslat = js_markerlat_array[i];
        var jslng = js_markerlng_array[i];
        markerloc_array[i] = jsloc;
        markerlat_array[i] = jslat;
        markerlng_array[i] = jslng;

}


// Now need to write all of this below into an array so that it can populate markers     from it! The difficulty is that the browser does not seem to like assigning the     google.maps.LatLng(array1[i],array2[i]) to a new array
//var mapmarker_array = new Array(js_markerloc_array.length);

i = 0;


while (i < js_markerloc_array.length)
{
    var mapmarker_array = new (google.maps.LatLng(markerlat_array[i],     markerlng_array[i])); //Uses coordinates from database "markers" table
    var test_marker1 = new google.maps.Marker({position:mapmarker1, title:     markerloc_array[i]});
    document.write(mapmarker1);
    document.write(markerloc_array[i]);

i++;
}

2 个答案:

答案 0 :(得分:0)

我很幸运,这不起作用。 使用new Array(x)总是会出现意外行为。

总是使用[]在Javascript中创建数组要好得多。脚本的上半部分应该是这样的:

<script>

var js_markerloc_array= JSON.parse('<?php echo json_encode($marker_location ); ?>');
var js_markerlat_array= JSON.parse('<?php echo json_encode($marker_lat ); ?>');
var js_markerlng_array= JSON.parse('<?php echo json_encode($marker_lng ); ?>');
var markerloc_array = [];
var markerlat_array = [];
var markerlng_array = [];

for (var i=0; len = js_markerloc_array.length; i < len; i++){
    markerloc_array[i] = js_markerloc_array[i];
    markerlat_array[i] = js_markerlat_array[i];
    markerlng_array[i] = js_markerlng_array[i];
}

一旦脚本执行,你还需要在javascript端再次解析Json,它看起来很混乱,但你需要将php json_encode(x)包装在JSON.parse()中,这是用于解析json的Javascripts方法。

i = 0;

while (i < js_markerloc_array.length)
{
    var mapmarker_array = new (google.maps.LatLng(markerlat_array[i],     markerlng_array[i])); //Uses coordinates from database "markers" table
    var test_marker1 = new google.maps.Marker({position:mapmarker1, title:         markerloc_array[i]});
    document.write(mapmarker1);
    document.write(markerloc_array[i]);

    i++;
}
</script>

我不知道你的情况与mapmarker1有什么关系,所以我无法帮助你,并且之前没有使用google.maps API所以我无法继续帮助,但我希望我所说的会有所帮助你!

答案 1 :(得分:0)

好的,它有效!这是代码:

while($row = mysqli_fetch_array($marker_result)) {

    $marker_location[] = $row["location"];
    $marker_lat[] = $row["lat"];
    $marker_lng[] = $row["lng"];

} //End of while loop

?>

<script>

//Converting php marker arrays to javascript marker arrays for use in for loop
    var js_markerloc_array= <?php echo json_encode($marker_location ); ?>;
    var js_markerlat_array= <?php echo json_encode($marker_lat ); ?>;
    var js_markerlng_array= <?php echo json_encode($marker_lng ); ?>;


    var mapmarkers = [];
    var testmarkers = [];
    i = 0;
    for (var i = 0; i < js_markerloc_array.length; i++) {
        mapmarkers[i] = new google.maps.LatLng(js_markerlat_array[i],     js_markerlng_array[i]);
        testmarkers[i] = new google.maps.Marker({position: mapmarkers[i],     title: js_markerloc_array[i]});
    }

然后在页面下方(谷歌地图初始化功能和选项之后)......

    i = 0;
    for (var i = 0; i < js_markerloc_array.length; i++) {
    testmarkers[i].setMap(map);
    }

所以,从上到下。 while循环将数据库查询结果放入3个PHP数组(一个用于位置,一个用于纬度,一个用于经度)。 然后将它们转换为3个相应的JavaScript数组。 然后创建2个新的JavaScript数组,从forloop中显示的其他3个数组中取值,3个数组包含在googlemaps函数中(这是导致问题的主要因素)。

注意这个forloop中有一个mapmarkers数组,它指定了lat和lng,然后是一个testmarkers数组,它指定了mapmarkers数组给出的位置并分配了位置名称。

然后是在页面下方的forloop中调用的testmarkers数组。 第二个forloop只需要包含lat,lng和location的testmarkers数组,并使用setMap google maps API函数将标记放在地图上!

因此,用户现在可以将自己的标记添加到数据库中,然后可以自动添加这些标记。希望这有助于某人,并感谢您的帮助和指出我臃肿的代码,建设性的批评非常欢迎。再次感谢。