我将地址输入作为一个长字符串而不是名称,地址,城市,州和邮政编码。除了地址和城市之间,我把它的大部分分开了。所以我想搜索任何街道类型的名称(法院,道路,街道,大道等),然后在字的末尾分割字符串。然后我将留下地址和城市分开。
strpos()
仅向我提供关键字的开头的位置,我希望它在关键字的结束处拆分。
例如,这就是我要做的事情:
John Doe
1 Main Street Anytown
NY
00000
我希望在Street
和Anytown
之间进行分配。这个地址不会是静态的,可能会有更多的单词等。
另一个想法是自动将字符串拆分为不同字段的函数。有人告诉我,在一些国家,邮政服务有一个API可以做到这一点。 USPS有这样的事吗?他们的网站没有表明它。
答案 0 :(得分:1)
您可以使用explode函数,该函数使用关键字拆分字符串并返回字符串数组。 使用explode的例子:
$str = '1 Main Street Anytown';
$array_of_string = explode('street',$str);
然后$array_of_strings[0]
将包含1 Main
,而$array_of_strings[1]
将包含Anytown
答案 1 :(得分: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);
一些提示:
- 考虑案例敏感度
- 您可以以相同的迭代方式使用
explode
函数- 我不确定,但可能有一些地址同时包含" street"和" avenue"字
答案 2 :(得分:0)
您似乎正在尝试反向搜索,因为strpos
默认情况下从开头开始给出字符串的位置,您需要将偏移设置为-1并从strlen中减去。 / p>
即
strlen($address) - strpos($address, 'Anytown', -1) - 1;
//search from reverse and output position starting from reverse
然而,正如评论中指出的那样,这可能不是解决您试图解决的问题的最佳方法。
答案 3 :(得分:0)
你可以这样做。
$word = "Street"
$pos = strpos($word, $address);
if ($pos !== false) {
$pos += strlen($word) - 1;
...
}
根据要匹配的单词数量,使用正则表达式可能比使用字符串函数更有效。