对于循环问题 - javascript - php - 谷歌地图

时间:2014-08-12 13:12:05

标签: javascript php google-maps loops

我在javascript中使用这个for循环,我正在尝试使用从数据库中检索的数据在google地图上创建多边形。我的问题在于我在javascript中包含了php,每次for循环运行时,$ i的值永远不会改变。谁都可以帮忙??

enter code here

<?php $i  = 0 ?>;
for(i =0; i< <?=$length?>; i++)
{

        var coordinates = "<?=$districtsarray[$i]['coords']?>";
        var coordinates = coordinates.substr(1, coordinates.length-2).split("),(");
        var souniCoordinates = coordinates.map(function(pointString){
            var latlon = pointString.split(", ");
            return  new google.maps.LatLng(latlon[0], latlon[1]);
        });

        var SouniCoords = [souniCoordinates];

    <?php echo $districtsarray[$i]['name']?> = new google.maps.Polygon({
        paths: SouniCoords,
        strokeColor: '#383838 ',
        strokeOpacity: 0.8,
        strokeWeight: 2,
        fillColor: '#CD5C5C ',
        fillOpacity: 0.5
    });
    <?php echo $districtsarray[$i]['name']?>.setMap(map);
    <?php $i=$i+1;?>

}
</script>

<?php

3 个答案:

答案 0 :(得分:0)

在我看来,像这样混合PHP和JavaScript会使代码难以阅读和维护。我建议使用PHP函数json_encode(http://php.net/manual/en/function.json-encode.php)将PHP数据结构转换为JSON并在一个地方回显。

然后使用JSON.parse()https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse将字符串转换为JavaScript对象。

所以它可能看起来像这样:

var data = JSON.parse(<?php echo json_encode($data); ?>);

然后在此之后才使用JavaScript:)。

答案 1 :(得分:0)

步骤1)将php变量的值转换为像这样的

的javascript变量
var javascriptarray = JSON.parse('< json_encode($districtsarray); ?>');

步骤2)现在使用“javascriptarray”&amp;循环中的javascript变量"i"可以像这样访问其元素

var coordinates = javascriptarray[i]['coords'];

答案 2 :(得分:0)

首先,请理解以上是不好的做法,因为它使维护/调试处于尴尬和不可能之间。如果您坚持这样做,更好的选择是使用字符串插值:

<?php
echo <<< END
//always use K&R style for js because of automatic ; insertion:
for (var i=0, i < $length, i++) {
    //do stuff
}
END
?>

你写它的方式&#39;我&#39;在javascript中没有定义,递增undefined没有有意义的结果。由于这些问题,你不应该像这样混合javascript和php。更好的选择是:

$.getJSON('myPHP.php', function(response) {
    var data = JSON.parse(response);
    for (index in data) {
        var row = data[index]
        //do stuff
    }
})

这使用jquery虽然使用原始js实现这一点当然是可能的,但它只需要更多的代码。有php脚本&#39; myPHP&#39;返回一个包含db。

记录的数组