我有一个包含地址的字符串,我需要知道该地址正在使用哪种街道类型。这是一个例子:
$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
解决此问题的最佳方法是什么?
答案 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
中,而第一个项目可能没有索引零。)