Я получаю адрес ввода в виде одной длинной строки, в отличие от имени, адреса, города, штата и почтового индекса. Я разделил большую часть этого, кроме того, между адресом и городом. Поэтому я хочу найти любое название улицы (двор, улица, улица, проспект и т. Д.), А затем разбить строку в конце слова. Тогда я останусь с адресом и городом отдельно.
strpos()
только дает мне позицию начало ключевого слова, я хочу разделить его на конец ключевого слова.
Например, вот где я до:
John Doe
1 Main Street Anytown
NY
00000
Я хочу разделить между Street
а также Anytown
, И этот адрес не будет статичным, может быть больше слов и т. Д.
Другая идея — функция, которая автоматически разбивает строку на разные поля. Кто-то сказал мне, что в некоторых странах у почтовой службы есть API, который это делает. У USPS есть такая вещь? Их сайт не указывает на это.
На самом деле, вам нужно найти несколько игл в стоге сена, суммировать положение и длину иглы.
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
функционировать таким же итерационным способом- Я не уверен, но могут быть некоторые адреса, которые содержат и слова «улица» и «улица»
Вы можете использовать функцию разнесения, которая разбивает строку с помощью ключевого слова и возвращает массив строк.
Пример использования взрыва:
$str = '1 Main Street Anytown';
$array_of_string = explode('street',$str);
затем $array_of_strings[0]
воля содержит 1 Main
а также $array_of_strings[1]
воля содержит Anytown
Вы могли бы сделать что-то вроде этого.
$word = "Street"
$pos = strpos($word, $address);
if ($pos !== false) {
$pos += strlen($word) - 1;
...
}
В зависимости от того, сколько разных слов соответствует, использование регулярных выражений может работать лучше, чем использование строковых функций.
Кажется, что вы пытаетесь искать в обратном направлении, как strpos
по умолчанию задает положение строки, начиная с начала, вам нужно установить смещение -1 и вычесть из strlen.
то есть
strlen($address) - strpos($address, 'Anytown', -1) - 1;
//search from reverse and output position starting from reverse
Однако, как указано в комментариях, это может быть не лучшим подходом к проблеме, которую вы пытаетесь решить.