我正在尝试将地址拆分为地址+城市状态。
例如:
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
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
)
explode() 可以工作,但请记住以下几点:您的城市/州中有一个逗号,如果您用逗号拆分,则不会进入第二个数组。下面是代码如何工作的示例。
$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没有真正的方法来确定什么是街道地址等等,也没有真正的方法来确定有多少逗号。
使用正则表达式,您可以将输入分成多个部分,并牢记这一点:每个字符串的末尾将类似于 [^,]+, [^,]+
.考虑到这一点,您可以制定如下正则表达式:
^(.*), ([^,]+,[^,]+)$
这会将字符串分为开头(.*)
、分隔符,
以及城市和州([^,]+,[^,]+)
。这将为您提供两个捕获组,并且可以成功处理任何字符串,以便它们不仅仅是城市和州(例如:Seattle, WA
)。
使用爆炸,你会得到第一个字符串的这些结果
$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
array_slice() 将允许您从数组末尾弹出任意数量的元素,而不管总数如何。
$address = 'some street name, Seattle, WA';
$city_state = array_slice(explode(',', $address), -2, 2);
print_r($city_state);
输出: 数组 ( [0] => 西雅图 [1] => WA )