我将多个地址保存到我的数据库中。我想获取多个地址的经度和纬度。 我正在使用代码:
foreach($address as $addr)
{
$prepAddr = str_replace(' ','+',$addr);
$geocode=file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.$prepAddr.'&sensor=false');
$output= json_decode($geocode);
echo $latitude = $output->results[0]->geometry->location->lat;
echo $longitude = $output->results[0]->geometry->location->lng;
}
$ address是返回所有地址的数组。
问题是,由于地址高于500,所以页面加载时间很长。 我已提到链接How to get longitude latitude of multiple addresses geo-location
但是,不能让这个工作。
请你帮我。任何帮助都非常感谢。
答案 0 :(得分:1)
首先使用foreach代替for循环,因为它更快。
第二件事是使用 CURL 而不是 file_get_content ,因为curl比我在SO的讨论中看到的更快。
点击此链接:using file get contents or curl
你可以在这里使用curl是curl的示例代码:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_POST, true );
curl_setopt($ch, CURLOPT_POSTFIELDS, trim($request));
$result = curl_exec($ch);
curl_close($ch);
这肯定会缩短执行时间。
答案 1 :(得分:0)
我建议延迟更多的是连接到api并获取数据所需的时间,而不是循环本身的速度。
为了使其更具可扩展性,您如何看待它可以使用多少个地址,然后分批处理它们。如果它可以正常运行100,那么使用start=100
加载它,并在运行结束时让脚本再次使用start=$start+100
调用,直到没有剩下。