将下拉选择的值拆分为两个变量?(PHP / HTML)


Splitting value of drop down selection into two variables? (PHP/HTML)

所以我有一个有两个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()来分割返回值。