我想要从字符串中获取坐标(从Google Maps img的src中获取)。下面是一个糟糕的尝试我的正则表达式不起作用。
那么,最好的方法是什么?正则表达式?在那种情况下应该如何组成?
$string = "//maps.google.com/maps/api/staticmap?sensor=false&center=56.393906,16.066206&zoom=12&size=344x170&language=sv&markers=56.393906,16.066206&maptype=roadmap&scale=1";
$matches = array();
preg_match('/center=(.*?)\zoom/s', $string, $matches);
... ?
通缉最终结果:
$coordiates = (
[0] = '56.393906',
[1] = '16.066206'
);
答案 0 :(得分:3)
你不应该使用正则表达式这样的东西,因为它会更慢,如果URL更改则更容易破坏。 PHP已经内置了这样的功能。使用parse_url()和parse_str()轻松完成此操作。
$string = "//maps.google.com/maps/api/staticmap?sensor=false¢er=56.393906,16.066206&zoom=12&size=344x170&language=sv&markers=56.393906,16.066206&maptype=roadmap&scale=1";
parse_str(parse_url($string, PHP_URL_QUERY), $vars);
print_r($vars);
输出:
Array
(
[sensor] => false
[center] => 56.393906,16.066206
[zoom] => 12
[size] => 344x170
[language] => sv
[markers] => 56.393906,16.066206
[maptype] => roadmap
[scale] => 1
)
所以为了得到你的坐标:
$coords = explode(',', $vars['center']);
print_r($coords);
// Outputs:
Array
(
[0] => 56.393906
[1] => 16.066206
)
答案 1 :(得分:0)
这不完美,但它应该适合你一点修改。它还显示了一个简单的可扩展正则表达式,可用于分解地图网址。
$data = preg_replace('/.*?center=(.*?)\,(.*?)&(.*?)/g', '$1~$2~$3~', $string);
$coordinates = explode('~', $data);
echo "X: " . $coordinates[0] . "<br />Y: " . $coordinates[1];