获取街道类型的地址

时间:2016-02-22 17:00:53

标签: php

我有一个包含地址的字符串,我需要知道该地址正在使用哪种街道类型。这是一个例子:

$street = "100 road Overflow";
$streetTypes = array("ROAD", "ST", "ABBEY", "BLVD", "ALLEY", "CAR");

//find and save the street type in a variable

//Response
echo "We have found ".$streetType." in the string";

此外,地址由用户提交,格式从不相同,这使事情变得复杂。到目前为止,我已经看到过这样的格式:

100 ROAD OVERFLOW
100,road Overflow
100, Overflow road

解决此问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

你需要这个:

$street = "100 road Overflow";
$streetTypes = array("ROAD", "ST", "ABBEY", "BLVD", "ALLEY", "CAR");

//find and save the street type in a variable
foreach($streetTypes as $item) {
    $findType = strstr(strtoupper($street), $item);
    if($findType){
        $streetType = explode(' ', $findType)[0];
    }
    break;
}

if(isset($streetType)) {
    echo "We have found ".$streetType." in the string";
} else {
    echo "No have found street Type in the string";
}

答案 1 :(得分:0)

从您的字符串开始,以及您正在寻找的单词集:

$street = "100 road Overflow";
$streetTypes = array("ROAD", "ST", "ABBEY", "BLVD", "ALLEY", "CAR");

首先将字符串转换为大写,然后使用preg_split将其拆分。我使用的正则表达式将它分隔在空格或逗号上。您可能需要尝试使用它来根据您的不同输入获得有效的东西。

$street_array = preg_split('/[\s*|,]/', strtoupper($street));

在原始字符串是数组之后,您可以使用array_intersect返回与目标字词集匹配的任何单词。

$matches = array_intersect($streetTypes, $street_array);

然后你可以用匹配的单词做任何你想做的事。如果您只想显示一个匹配项,则应在$streetTypes中对列表进行优先排序,以便最重要的匹配是第一个(如果有这样的话)。然后您可以使用以下方式显示它:

if ($matches) {
    echo reset($matches);
}

(您不应使用$matches[0]来显示第一个匹配项,因为密钥将保留在array_intersect中,而第一个项目可能没有索引零。)