doupi1532
doupi1532
2019-02-03 19:37

从特定格式的完整地址字符串中提取城市和州

已采纳

I have a set of addresses stored as individual strings. Here are possible values of those strings:

"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"

The dates will always follow this format, where it could contain a venue name, street address, city, state, and zip

I would like to dynamically extract the city and state only from these strings:

$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
    }
}

Given the pattern of the address values, is there something I can do to extract the city and state based on the commas?

What I can see is that the city will always be the last comma in the string..

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • dplht39359 dplht39359 2年前

    If I read it correct then you want the two last items (if available).
    Use explode and then implode back the last two items.

    $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);
    

    Output:

    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

    If you don't want the zip, then you can explode the last item on space if $arr count is more than one.

    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));
        }
    }
    

    Output:

    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

    点赞 评论 复制链接分享
  • doushajian2018 doushajian2018 2年前

    you can use explode and count function together

    
    $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;
    
        }
    }
    
    点赞 评论 复制链接分享

相关推荐