0

我正在尝试将地址拆分为地址+城市状态。

例如:

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
4

5 回答 5

1

explodearray_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
)
于 2013-10-29T03:09:09.130 回答
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 没有真正的方法来确定什么是街道地址等等,也没有真正的方法来确定会有多少逗号。

于 2013-10-29T02:55:07.327 回答
0

array_slice() 可以让你从你想要的数组末尾弹出许多元素,而不管总数是多少。

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

输出:数组( [0] => 西雅图 [1] => WA)

于 2013-10-29T03:09:07.713 回答
0

使用正则表达式,您可以将输入分成几个部分,记住这一点:每个字符串的结尾都将是[^,]+, [^,]+. 考虑到这一点,您可以制定一个正则表达式,例如

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

这会将字符串分隔为开头 (.*)分隔符 ,以及城市和州 ([^,]+,[^,]+)。这将为您提供两个捕获组,并将成功处理任何字符串,使它们不仅仅是城市和州(例如:)Seattle, WA

于 2013-10-29T03:00:17.417 回答
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
于 2013-10-29T03:02:47.193 回答