2013-10-29 46 views
0

我試圖將地址拆分爲地址+城市狀態。PHP - 獲取最後一個逗號後的內容

例如:

some street name, Seattle, WA 
other stree, number, something, Seattle, WA 

假設地址的最後兩個項目將永遠是城市,國家...我怎麼可以拆分一切是最後一秒逗號之前?

所以,我想獲得一個數組或使用:

array[0] = some street name 
array[1] = Seattle, WA 

array[0] = other stree, number, something 
array[1] = Seattle, WA 

回答

1

explodearray_sliceimplode可以在這裏幫助您:

function address($input) { 
    $parts = explode(",", $input); 
    $address = array_slice($parts, 0, count($parts) - 2); 
    $city_state = array_slice($parts, count($parts) - 2); 
    return array(trim(implode(",", $address)), trim(implode(",", $city_state))); 
} 

address("some street name, Seattle, WA"); 
// => 
Array 
(
    [0] => some street name 
    [1] => Seattle, WA 
) 

address("other street, number, something, Seattle, WA"); 
// => 
Array 
(
    [0] => other street, number, something 
    [1] => Seattle, WA 
) 
1

爆炸()會工作,但要記住以下幾點:你的城市/州中有一個逗號,而不會去在第二個數組中,如果用逗號分隔。 下面是代碼如何工作的示例。

$str = "Some Street Name, Seattle, WA" 
$array = explode(",", $str); 

你的數組看起來像這樣。

array[0] = Some Street Name 
array[1] = Seattle 
array[2] = WA 

唯一的問題是,當您將字符串拆分成這些部分時,WA被放入第三個索引(array [2])。您可以稍後輕鬆組合此元素。

$array[1] .= ", " . $array[2]; 
$array[2] = null; 

你再留下

array[0] = Some Street Name 
array[1] = Seattle, WA 

編輯:如果你正在處理多個逗號,我建議你採取不同的方式對你的代碼。我假設你在做訂單,不是嗎?如果是這樣,用表單提示用戶填寫信息。使用單選按鈕,複選框,下拉菜單等,您的數據將更容易處理。

PHP沒有真正的方式來確定什麼是街道地址和什麼,也沒有真正的方式來確定將有多少逗號。

+1

你可以使用'計數()'函數,並獲取與「最高計數」相關聯的元素,然後「計數減1」以獲得倒數第二個,總共將是最後兩個,總是「西雅圖」(count ()-1)'和'WA(count())' – TheNytangel

+1

之後,你可以在t上使用'strlen()'他最後兩個數組''(西雅圖,華盛頓州)''會給你'11',然後使用'substr()'函數,如'substr(「其他stree,number,something,WA,Seattle,WA,0,-13 )'這隻會返回'其他的stree,number,something',而且你之前還會擁有'Seattle,WA' – TheNytangel

0

使用正則表達式,可以將輸入分成多個部分,記住這一點:每個字符串的結尾都是沿着[^,]+, [^,]+的行。保持在考慮,you could formulate a regex such as this

^(.*), ([^,]+,[^,]+)$ 

這將字符串分隔成開始(.*)分隔,,並且的城市和國家([^,]+,[^,]+)。這將給你兩個捕獲組,並將成功地爲任何字符串,使他們不是只是城市和州(例如:Seattle, WA)。

0

使用爆炸,你會得到第一個字符串

$array[0] = some street name 
$array[1] = Seattle 
$array[2] = WA 

$cityIndex = count($array)-2; 
$stateIndex = count($array)-1; 

現在的這些結果,您可以使用它們

$array[$cityIndex].=','.$array[$stateIndex]; 

最後你得到了

$array[0] = some street name 
$array[1] = Seattle, WA 
0

array_slice()將讓你彈出然而,無論總體數量如何,您需要的數組末尾都有很多元素。

$address = 'some street name, Seattle, WA'; 
$city_state = array_slice(explode(',', $address), -2, 2); 
print_r($city_state); 

輸出:陣列([0] =>西雅圖[1] => WA)