2011-05-01 51 views
3

所以我有一個帶有兩個HTML下拉列表的網站 - 一個是美國各州的列表,另一個是所選州/城市的列表。截至目前,我有每個狀態的HTML文件,並且它們都具有列出象這樣的選項:將下拉選擇的值拆分爲兩個變量? (PHP/HTML)

<option value="44.729932, -72.381758">Albany</option> 
<option value="44.976728, -73.30257">Alburg</option> 

值是每個城市的座標(緯度,經度)。當我點擊「搜索」時,表單數據被髮送到SimpleGeo的PHP腳本(位置數據庫公司 - 令人驚歎,順便說一句) - 選擇城鎮的目的是爲這個部分的$ lat和$ lon提供值PHP腳本,它被送到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,$參數);」部分原因是由於某些原因,當我更換$ $座標lat和$經度,然後用替換它們的值:

$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」這樣的$ lat和$ lon?!或替代,如何讓我的下拉列表中的值傳遞的緯度和經度,如果我做的選擇是這樣的:

<option lat="44.976728" lon="-73.30257">Alburg</option> 

感謝您的閱讀,對不起,這是這麼長時間!凌晨2:50,我的眼睛流血了! :P幫助非常感謝......

回答

1

您可以拆分您的選項的值來獲取經度和緯度。

用正則表達式驗證你的領域像-?[0-9]+\.[0-9]+, -?[0-9]+\.[0-9]+,然後explode,並得到了兩個值:

list($lat, $lon) = explode(", ", $_GET['city']); 

這裏,隔板爲,包括空間,順便說一句刪除。

+1

您可能想要一個更像'^ - ?\ d + \。\ d +, - ?\ d + \。\ d + \ z'的正則表達式。另外,如果使用正則表達式進行驗證,您也可以使用它來提取值。 – alex 2011-05-01 07:01:42

+0

非常感謝!這完美的作品!如果我理解你和Alex建議的正則表達式代碼的用途,那麼它不是必需的,因爲它全部來自可靠的源代碼,並且我在Notepad ++中運行正則表達式和擴展表達式來清除事件並確保所有內容都處於正確的格式。謝謝你們,這讓我很難過! :P – tylerl 2011-05-01 21:22:43

+0

@tylerl什麼是可靠來源?互聯網? – alex 2011-05-02 00:20:07

0

我建議你使用一個唯一的ID作爲選項的value屬性,然後根據用戶選擇的ID從數據庫中加載所選城鎮的緯度和經度。

如果你堅持這樣做,那麼你可以使用explode()來分割返回的值。

1

你可以試試這個...

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

上面的額外數據的問題任何一方都不會是正則表達式的問題。