我正在尝试将地址拆分为地址+城市州。
例如:
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
答案 0 :(得分:1)
explode()会起作用,但请记住以下内容:您的城市/州有逗号,如果您用逗号分割,则不会进入第二个数组。 以下是代码如何工作的示例。
$str = "Some Street Name, Seattle, WA"
$array = explode(",", $str);
你的阵列看起来像这样。
array[0] = Some Street Name
array[1] = Seattle
array[2] = WA
唯一的问题是当你将字符串拆分成这些部分时,WA被放入第三个索引(数组[2])。您可以稍后轻松组合此元素。
$array[1] .= ", " . $array[2];
$array[2] = null;
然后你将离开
array[0] = Some Street Name
array[1] = Seattle, WA
编辑:如果您正在处理多个逗号,我建议您对代码采用不同的方法。我假设你在做订单,不是吗?如果是这样,请提示用表单填写信息的用户。使用单选按钮,复选框,下拉菜单等,您的数据将更容易处理。
没有真正的PHP方法来确定什么是街道地址等等,也没有真正的方法来确定会有多少逗号。
答案 1 :(得分:1)
explode
,array_slice
和implode
可以为您提供帮助:
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
)
答案 2 :(得分:0)
使用正则表达式,您可以将输入分解为多个部分,记住这一点:每个字符串的结尾都是[^,]+, [^,]+
行。考虑到这一点,you could formulate a regex such as this:
^(.*), ([^,]+,[^,]+)$
这会将字符串分为开头 (.*)
,分隔符 ,
和城市和州 ([^,]+,[^,]+)
。这将为您提供两个捕获组,并且可以成功地处理任何字符串,使得它们只是城市和州(例如:Seattle, WA
)。
答案 3 :(得分:0)
使用explode并获得第一个字符串的结果
$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
答案 4 :(得分:0)
array_slice()将允许您在所需数组的末尾弹出多个元素,而不管总数。
$address = 'some street name, Seattle, WA';
$city_state = array_slice(explode(',', $address), -2, 2);
print_r($city_state);
输出:数组([0] =>西雅图[1] => WA)