PHP - 获取最后一个但一个逗号之后的内容


PHP - Getting content after last but one comma

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

例如:

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

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
)

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 )