Как найти конец слова с помощью strpos ()

Я получаю адрес ввода в виде одной длинной строки, в отличие от имени, адреса, города, штата и почтового индекса. Я разделил большую часть этого, кроме того, между адресом и городом. Поэтому я хочу найти любое название улицы (двор, улица, улица, проспект и т. Д.), А затем разбить строку в конце слова. Тогда я останусь с адресом и городом отдельно.

strpos() только дает мне позицию начало ключевого слова, я хочу разделить его на конец ключевого слова.
Например, вот где я до:

John Doe
1 Main Street Anytown
NY
00000

Я хочу разделить между Street а также Anytown, И этот адрес не будет статичным, может быть больше слов и т. Д.

Другая идея — функция, которая автоматически разбивает строку на разные поля. Кто-то сказал мне, что в некоторых странах у почтовой службы есть API, который это делает. У USPS есть такая вещь? Их сайт не указывает на это.

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 функционировать таким же итерационным способом
  • Я не уверен, но могут быть некоторые адреса, которые содержат и слова «улица» и «улица»
1

Другие решения

Вы можете использовать функцию разнесения, которая разбивает строку с помощью ключевого слова и возвращает массив строк.
Пример использования взрыва:

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

затем $array_of_strings[0] воля содержит 1 Main а также $array_of_strings[1] воля содержит Anytown

1

Вы могли бы сделать что-то вроде этого.

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

В зависимости от того, сколько разных слов соответствует, использование регулярных выражений может работать лучше, чем использование строковых функций.

0

Кажется, что вы пытаетесь искать в обратном направлении, как strpos по умолчанию задает положение строки, начиная с начала, вам нужно установить смещение -1 и вычесть из strlen.

то есть

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

Однако, как указано в комментариях, это может быть не лучшим подходом к проблеме, которую вы пытаетесь решить.

0
По вопросам рекламы [email protected]