2014-05-23 42 views
-1

我有兩個Javascript數組已被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++; 
} 
+0

你在頂部的forloop似乎有點毫無意義。你有三個數組,你循環,創建三個與前三個數組相同的數組......剛使用三個原始數組有什麼不對? –

+0

你的大部分JS似乎毫無意義。你在PHP中創建數組,然後用json_encode將它們嵌入到JS中,然後循環這些數組並將它們的內容複製到OTHER數組中,然後循環這些新數組並嘗試執行谷歌的東西。所有陣列擺弄的是什麼?您只需生成適當的數組名稱即可。 –

回答

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()這是JavaScripts解析json的方法。

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之前,所以我不能幫助任何進一步的,但我希望我說過會幫助你!

+0

謝謝我會放棄它......至於額外的三個陣列,它們是我正在做的一些測試的殘餘部分,當其餘部分正常工作時,我將整理它。總體思路是,它循環遍歷數據庫,並用人們添加的標記填充地圖。目前它只添加數據庫表中的最後一個標記,而我希望它輸出所有這些標記。我會看看並且回覆你......如果它有效,我會發布完整的解決方案,以便其他人可以從中解脫出來(當人們在工作時沒有發佈代碼時會使我惱火! ) –

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數組,它指定mapMarkkers數組給定的位置並分配位置名稱。

然後是在頁面下方的forloop中調用的testmarkers數組。 這第二個forloop只需要包含lat,lng和位置的testmarkers數組,並使用setMap google maps API函數將標記放置在地圖上!

因此,用戶現在可以將自己的標記添加到數據庫中,然後可以自動添加這些標記。希望這可以幫助某人,並感謝您的幫助,並指出我臃腫的代碼,建設性的批評非常受歡迎。再次感謝。