所以我有一个有两个HTML下拉列表的网站-一个是美国各州的列表,另一个是所选州的城市/城镇列表。到目前为止,每个州都有一个HTML文件,它们都有如下列出的选项:
<option value="44.729932, -72.381758">Albany</option>
<option value="44.976728, -73.30257">Alburg</option>
值是每个城镇的坐标(纬度、经度)。当我点击"search"时,表单数据被发送到SimpleGeo的PHP脚本(一个位置数据库公司——很神奇,顺便说一句)——选择城镇的目的是在PHP脚本的这一部分中提供$lat和$lon的值,对于每个查询,这些值被发送到SimpleGeo:
$q = $_GET['q'];
$lat = 44.729932;
$lon = -72.381758;
$args = array('q' => $q, 'num' => 25, 'category' => Restaurant, 'radius' => 25);
$results = $client->getPlaces($lat, $lon, $args);
不能更改的部分是"getPlaces($lat, $lon, $args);"部分,因为出于某种原因,当我用$坐标替换$lat和$lon时,然后将它们的值替换为:
$coordinates = $_GET['city']; ('city' is the name and id of my city/town lists)
它不认为它是一个有效的查询。同时,如果你用数字代替"$lat, $lon"作为坐标,它可以完全理解。
…我只需要在HTML文件本身或PHP脚本中拆分我的值,通过识别","表示纬度值已经结束,经度值已经开始。我不知道应该怎么做,我只知道$lat和$lon必须等于我的HTML文件设置的值——每个状态一个文件,平均每个文件大约500个选项……我如何使它将"44.729932,-72.381758"这样的内容识别为$ late和$lon?或者,如果我使选项看起来像这样,我如何使下拉列表传递lat和lon的值:
<option lat="44.976728" lon="-73.30257">Alburg</option>
谢谢你的阅读,不好意思这么长!现在是凌晨2点50分,我的眼睛在流血!
可以拆分选项的值来获得经度和纬度。
用像-?[0-9]+'.[0-9]+, -?[0-9]+'.[0-9]+
这样的正则表达式验证您的字段,然后explode
它并获得两个值:
list($lat, $lon) = explode(", ", $_GET['city']);
这里的分隔符是,
,包括空格,顺便删除它。
你可以试试这个…
if (isset($_GET['location']) AND strpos($_GET['location'], ', ') !== FALSE) {
list($latitude, $longitude) = explode(', ', $_GET['location']);
}
…不过,如果有人给你发送一些有趣的东西,比如hello -4.3, 3.1 bye!
,这也会成功地分裂。
Ideone .
或者,您可以使用此正则表达式验证并提取值。
if ($location = filter_input(INPUT_GET, 'location')) {
preg_match('/^(?P<latitude>-?'d+'.'d+), (?P<longitude>-?'d+'.'d+)'z/', $location, $matches);
$latitude = $matches['latitude'];
$longitude = $matches['longitude'];
}
Ideone .
上面的额外数据的问题将不会是一个问题与正则表达式。
我建议您使用唯一的ID作为选项的value属性,然后根据用户选择的ID从数据库中加载所选城镇的经纬度。
如果你坚持这样做,那么你可以使用explosion()来分割返回值。