2016-11-22 3 views
1
<?php 
    include 'db.php'; 
    $sql_locations = "SELECT * FROM location";   
    $result = mysqli_query($conn,$sql_locations); 
    $count = mysqli_num_rows($result);  
    $markers = array(); 

    while($row = mysqli_fetch_array($result,MYSQL_ASSOC))   
    { 

     $markers = array(  
     array(
     'abc', 
     $row['latitude'], 
     $row['longitude'] 
     ));  

    } ?> 

это мой код для получения местоположения из базы данных. и у меня есть этот скрипт для показа карты.Пока цикл показывает только одну строку?

<script> 
function initialize() { 
    var map; 
    var bounds = new google.maps.LatLngBounds(); 
    var mapOptions = { 
     mapTypeId: "roadmap", 
     center: new google.maps.LatLng(20.5937, 78.9629), // somewhere in the uk BEWARE center is required 
     zoom: 1, 
    }; 
    // Display a map on the page 
    map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); 
    map.setTilt(45); 

    // Multiple Markers 
    var markers = <?php echo json_encode($markers);?>; 



    // Display multiple markers on a map 
    var infoWindow = new google.maps.InfoWindow(); 
    var marker, i; 

    // Loop through our array of markers & place each one on the map 
    for (i = 0; i < markers.length; i++) { 
     var position = new google.maps.LatLng(markers[i][1], markers[i][2]); 
     bounds.extend(position); 
     marker = new google.maps.Marker({ 
      position: position, 
      map: map, 
      title: markers[i][0] 
     }); 

     // Allow each marker to have an info window 
     google.maps.event.addListener(marker, 'click', (function (marker, i) { 
      return function() { 
       infoWindow.setContent(infoWindowContent[i][0]); 
       infoWindow.open(map, marker); 
      } 
     })(marker, i)); 

     // Automatically center the map fitting all markers on the screen 
     map.fitBounds(bounds); 
    } 

    //Override our map zoom level once our fitBounds function runs (Make sure it only runs once) 
    var boundsListener = google.maps.event.addListener((map), 'bounds_changed', function (event) { 
     this.setZoom(5); 
     google.maps.event.removeListener(boundsListener); 
    }); 

} 
google.maps.event.addDomListener(window, 'load', initialize); 

моя карта работает нормально. im просто сталкивается с проблемой, чтобы отобразить все мои записи из базы данных. мой цикл while показывает только сначала из таблицы, пожалуйста, помогите мне с этим. Я хочу отображать все местоположения из базы данных с маркерами markers.on print_r o $, которые показывают только первую строку таблицы. на var_dump на $ rows отображается все данные. но я получаю только один маркер для своей первой строки. У меня всего 2 строки в таблице. заранее спасибо.

+5

Вы перезаписать переменную на каждом цикле –

+0

'$ маркеры [] = массив ('ABC', $ строка [ 'широта'], $ row ['longitude']); ' –

ответ

1

Вы переписав $markers переменную в while цикле. Так что вам нужно сделать, как показано ниже: -

$markers[] = array('abc',$row['latitude'],$row['longitude']); 

Или (если требуется внешний массив)

$markers[] = array(array('abc',$row['latitude'],$row['longitude'])); 
+0

ammydon благодарит за маркировку. рад помочь вам :) :) –

1

Вы обновляете весь массив вместо добавления к нему элемента.

изменение

$markers = array(  
    array(
    'abc', 
    $row['latitude'], 
    $row['longitude'] 
    ));  

в

$markers[] = array(  
    array(
    'abc', 
    $row['latitude'], 
    $row['longitude'] 
    ));  
1

Вы перезапись переменную $markers на каждой итерации.

Вам нужно просто добавить новый элемент массива вместо:

// Define the variable 
$markers = array(); 

while($row = mysqli_fetch_array($result,MYSQL_ASSOC))   
{ 
    // Push a new element to the array instead of overwrite it. 
    $markers[] = array(
     'abc', 
     $row['latitude'], 
     $row['longitude'] 
    );  

} 
+0

спасибо, что это работает для меня. – ammydon

+0

Если это сработало, не стесняйтесь отмечать вопрос как решенный –

Смежные вопросы