2016-07-28 13 views
1

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

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

John Doe 
1 Main Street Anytown 
NY 
00000 

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

Другая идея - это функция, которая автоматически разделяет строку на разные поля. Кто-то сказал мне, что в некоторых странах почтовая служба имеет 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 

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

0

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

$word = "Street" 

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

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

0

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

$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); 

Некоторые советы:

  • Рассмотрим случай
  • Чувствительность
  • Вы можете использовать функцию explode в одном итерационном образом
  • я не уверен, но может быть несколько адресов который содержит слова «улица» и «проспект»

 Смежные вопросы

  • Нет связанных вопросов^_^