从PHP数组创建Google Maps v3标记列表


Creating Google Maps v3 marker list from PHP array

我有一个PHP数组在下面的形式,我试图绘制这些在谷歌地图(v3)在我的网站,但想知道最好的方式来创建标记的代码。下面是我测试硬编码的一些工作代码的示例。

我可以创建一个循环,使列表,但我将不得不检查删除最后一个逗号,否则Javascript将是无效的,觉得这是相当hacky和可能不是最好的方式来做到这一点,我在想,反而会有一些我忽略了,这将允许我传递一个数组,并告诉它什么键来创建Javascript,所有正确格式化?

<

例子数组/strong>

Array ( 
[0] => Array ( 
[propertyId] => 1603 
[address1] => 1 Anystreet 
[address2] => 
[address3] => 
[town] => London: City 
[postcode] => AB1 3DE 
[sizeTotalSqM] => 906.18 
[sizeTotalSqF] => 9754.00 
[lat] => 51.5245029 
[lng] => -0.1120882 
[distance] => 0.00461191366463175 
[distanceMeters] => 0.512207377367013 
[description] => HTML description to go in here 
[imageUrl] => http://rackcdn.com/properties/o/1603-1.jpg 
[agentArray] => a:2:{i:0;a:6:{s:11:"agentUserId";s:2:"91";s:18:"agentUserFirstname";s:7:"Paul";s:16:"agentUserSurname";s:6:"Smith";s:18:"agentUserTelephone";s:20:"020 1 234 5678";s:9:"agentName";s:11:"The Agency";s:9:"agentLogo";s:15:"the-agency.png";}i:1;a:6:{s:11:"agentUserId";s:3:"144";s:18:"agentUserFirstname";s:6:"Rupert";s:16:"agentUserSurname";s:7:"Perkins";s:18:"agentUserTelephone";s:20:"020 1 234 5678";s:9:"agentName";s:11:"The Agency";s:9:"agentLogo";s:15:"the-agency.png";}} 
) 
[1] => Array ( 
[propertyId] => 505 
[address1] => 2 Anystreet 
[address2] => 
[address3] => 
[town] => London: City 
[postcode] => AB2 3CD 
[sizeTotalSqM] => 916.30 
[sizeTotalSqF] => 9863.00 
[lat] => 51.5189016 
[lng] => -0.1027654 
[distance] => 0.00908959843557461 
[distanceMeters] => 0.634894510451541 
[description] => Another description 
[imageUrl] => image-coming.png 
[agentArray] => a:3:{i:0;a:6:{s:11:"agentUserId";s:2:"91";s:18:"agentUserFirstname";s:7:"Paul";s:16:"agentUserSurname";s:6:"Smith";s:18:"agentUserTelephone";s:20:"020 1 234 5678";s:9:"agentName";s:11:"The Agency";s:9:"agentLogo";s:15:"the-agency.png";}i:1;a:6:{s:11:"agentUserId";s:1:"5";s:18:"agentUserFirstname";s:5:"David";s:16:"agentUserSurname";s:7:"Beckham";s:18:"agentUserTelephone";s:20:"020 1 234 5678";s:9:"agentName";s:11:"The Agency";s:9:"agentLogo";s:15:"the-agency.png";}i:2;a:6:{s:11:"agentUserId";s:2:"80";s:18:"agentUserFirstname";s:4:"Mark";s:16:"agentUserSurname";s:6:"Bourne";s:18:"agentUserTelephone";s:20:"020 1 234 5678";s:9:"agentName";s:11:"The Agency";s:9:"agentLogo";s:15:"the-agency.png";}} 
) 
[2] => Array ( 
[propertyId] => 506 
[address1] => 45 Any Road
[address2] => Aldwych
[address3] => 
[town] => n/a 
[postcode] => AB3 2RF
[sizeTotalSqM] => 562.90 
[sizeTotalSqF] => 6059.00 
[lat] => 51.5189016 
[lng] => -0.1027654 
[distance] => 0.00908959843557461 
[distanceMeters] => 0.634894510451541 
[description] => Another description. 
[imageUrl] => http://rackcdn.com/properties/o/506-1.jpg 
[agentArray] => a:2:{i:0;a:6:{s:11:"agentUserId";s:1:"9";s:18:"agentUserFirstname";s:5:"Colin";s:16:"agentUserSurname";s:4:"Braddy";s:18:"agentUserTelephone";s:20:"020 1 234 5678";s:9:"agentName";s:11:"The Agency";s:9:"agentLogo";s:15:"the-agency.png";}i:1;a:6:{s:11:"agentUserId";s:3:"107";s:18:"agentUserFirstname";s:7:"Richard";s:16:"agentUserSurname";s:6:"Head";s:18:"agentUserTelephone";s:20:"020 1 234 5678";s:9:"agentName";s:11:"The Agency";s:9:"agentLogo";s:15:"the-agency.png";}} 
) 
) 

Google地图的硬编码Javascript代码-使用数组中的address1, lat和lng。将来可能需要添加更多

var properties = [
        ['1 Anystreet', 51.5245029, -0.1120882],
        ['2 Anystreet', 51.5189016, -0.1027654],
        ['45 Any Road', 51.5189016, -0.1027654]
    ];

您可以操作PHP数组来模拟Google Maps API的要求:

 Array ( 
     [0] => Array (
         [address1] => 1 Anystreet London
         [lat] => 51.5245029 
         [lng] => -0.1120882 
     )
     [1] => ...
 ) 

要使其JavaScript可读,只需回显json编码:

<script type="text/javascript">
    var locations = <?php echo json_encode($locations_array); ?>;
</script>

这避免了任何字符转义,删除尾随逗号,插入方括号等。

这有一个额外的好处,保持你的数据键,所以你可以访问你的数据如下使用JavaScript:

for(i in locations)
{
    var address1 = locations[i].address1;
    var lat = locations[i].lat;
    var lng = locations[i].lng;
    // use address1, lat, lng however you like
}

我总是使用下面的解决方案,它总是有效的。;)

在视图:

<script type="text/javascript">
var properties = [
    <?php
    $count = count($data);
    for ( $i = 1; i <= count; ++$i ) {
        $lat = str_replace(',', '.', $data['lat']);
        $lng = str_replace(',', '.', $data['lng']);
        echo '["' . $data['address1'] . '", ' . $lat . ',' . $lng . ']';
        if ( $i < $count ) {
            echo ',';
        }
    }
    ?>
];
</script>