从一个完整的地址字符串以下特定的格式提取城市和状态

问题描述 投票:0回答:2

我有一组存储为单个字符串的地址。下面是这些字符串的可能值:

"Staples Center, 555 Test Drive, Los Angeles, CA 98112"
"555 Test Drive, Los Angeles, CA 98112"
"Los Angeles, CA"
"Los Angeles, CA 98112"
"Los Angeles"

日期将始终遵循这种格式,它可以包含地点名称,街道地址,城市,州和邮编

我想只有从这些字符串动态提取的城市和国家:

$addresses_array = array(
    "Staples Center, 555 Test Drive, Los Angeles, CA 98112",
    "555 Test Drive, Los Angeles, CA 98112",
    "Los Angeles, CA",
    "Los Angeles, CA 98112",
    "Los Angeles"
);

foreach ($addresses_array as $address) {
    if (strpos($address, ',') !== false) {
        // extract the city and state
    }
}

给出的地址值的模式,是有什么我能做的提取基于逗号的城市和国家?

我能看到的是,这座城市将永远是字符串中的最后一个逗号..

php strpos
2个回答
2
投票

如果我的理解是正确的,那么你想要的最后两个项目(如果可用)。 使用爆炸,然后爆回最后两个项目。

$addresses_array = array(
    "Staples Center, 555 Test Drive, Los Angeles, CA 98112",
    "555 Test Drive, Los Angeles, CA 98112",
    "Los Angeles, CA",
    "Los Angeles, CA 98112",
    "Los Angeles"
);

foreach ($addresses_array as &$address) {
    $arr = explode(", ", $address);
    $address = implode(", ", array_slice($arr, -2));
}

var_dump($addresses_array);

输出:

array(5) {
  [0]=>
  string(21) "Los Angeles, CA 98112"
  [1]=>
  string(21) "Los Angeles, CA 98112"
  [2]=>
  string(15) "Los Angeles, CA"
  [3]=>
  string(21) "Los Angeles, CA 98112"
  [4]=>
  &string(11) "Los Angeles"
}

https://3v4l.org/Gqcid

如果你不希望压缩,那么你就可以爆炸空间的最后一个项目,如果$ ARR数超过一个。

foreach ($addresses_array as &$address) {
    $arr = explode(", ", $address);
    if(count($arr) >1){
        $arr[count($arr)-1] = explode(" ", $arr[count($arr)-1])[0];
        $address = implode(", ", array_slice($arr, -2));
    }
}

输出:

array(5) {
  [0]=>
  string(15) "Los Angeles, CA"
  [1]=>
  string(15) "Los Angeles, CA"
  [2]=>
  string(15) "Los Angeles, CA"
  [3]=>
  string(15) "Los Angeles, CA"
  [4]=>
  &string(11) "Los Angeles"
}

https://3v4l.org/uKvke


-1
投票

您可以使用explodecount共同发挥作用


$addresses_array = array(
    "Staples Center, 555 Test Drive, Los Angeles, CA 98112",
    "555 Test Drive, Los Angeles, CA 98112",
    "Los Angeles, CA",
    "Los Angeles, CA 98112",
    "Los Angeles"
);


foreach ($addresses_array as $address) {
    $addr = explode(",",$address);
    switch (count($addr))
    {
        case 1:
        case 2:
            echo  $addr[0];
            break;
        case 3:
            echo  $addr[1];
            break;
        case 4:
            echo  $addr[2];
            break;

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.