我有一个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>