2016-07-28 99 views
1

我将地址输入作为一个长字符串输入,而不是名称,地址,城市,州和邮编。除了地址和城市之间,我还分了大部分。所以我想搜索任何街道类型的名称(法院,道路,街道,大街等),然后在单词的末尾分割字符串。然后我将留下地址和城市分开。如何使用strpos()查找单词的结尾()

strpos()只给了我开始关键字的位置,我希望它在关键字的分裂。 例如,这就是我到:

John Doe 
1 Main Street Anytown 
NY 
00000 

我想StreetAnytown之间的分裂。而且这个地址不会是静态的,可能会有更多的单词等。

另一种想法是将字符串自动分成不同的字段。有人告诉我,在一些国家,邮政服务有一个API来完成它。 USPS有这样的事吗?他们的网站没有注明它。

+0

如果您以正确的格式输入地址,USPS会检查API是否有效地址。但是这并不能解决这个问题 –

+0

你的意思是strrpos函数? (strrpos - 查找字符串中最后一个子字符串出现的位置) –

+1

一旦用'strpos'开始了关键字的开始,您可以添加'strlen(“keyword”)'来结束(特别是后面的空格)关键词)。 –

回答

0

看起来你正在试图反向搜索,因为strpos给出了从默认开始的字符串的位置,你需要设置偏移量为-1并从strlen中减去。

strlen($address) - strpos($address, 'Anytown', -1) - 1; 
//search from reverse and output position starting from reverse 

但是在评论中指出,这可能不是解决问题的最好方法,你正在试图来解答。

0

你可以做这样的事情。

$word = "Street" 

$pos = strpos($word, $address); 
if ($pos !== false) { 
    $pos += strlen($word) - 1; 
    ... 
} 

根据有多少不同的单词匹配,使用正则表达式可能比使用字符串函数更好。

0

你可以使用explode函数,它使用关键字分割一个字符串并返回一个字符串数组。使用爆炸的 例子:

$str = '1 Main Street Anytown';   
$array_of_string = explode('street',$str);  

然后$array_of_strings[0]将包含1 Main$array_of_strings[1]将包含Anytown

1

其实你应该做在草堆中寻找多针,总结位置和针头的长度是什么。

function strpos_street($string){ 
    $types = [ 
    'court', 
    'road', 
    'street', 
    'avenue' 
    ]; 
    foreach($types as $t){ 
     $pos = strpos(strtolower($string), strtolower($t)); 
     if($pos === false) continue; 
     else return $pos + strlen($t) - 1; 
    } 
    return -1; 
} 

echo strpos_street($string); 

一些提示:

  • 考虑的情况下sensivity
  • 您可以使用explode功能在同一个迭代的方式
  • 我不知道,但可能会有一些地址其中包含“街道”和“大道”字样
相关问题