2016-07-28 26 views
1

Ich bekomme eine Adresse Eingabe als eine lange Zeichenfolge im Gegensatz zu Name, Adresse, Stadt, Staat und PLZ. Ich habe das meiste aufgespalten, außer zwischen der Adresse und der Stadt. Ich möchte also nach einem Straßennamen (Hof, Straße, Straße, Allee usw.) suchen und die Zeichenfolge am Ende des Wortes aufteilen. Dann werde ich mit der Adresse und der Stadt getrennt bleiben.Wie finde ich das Ende eines Wortes mit strpos()

strpos() gibt mir nur die Position des von dem eingegebenen Suchbegriff beginnen, möchte ich es am Ende des Stichwortes spalten. Zum Beispiel das ist, wo ich bin bis zu:

John Doe 
1 Main Street Anytown 
NY 
00000 

Ich möchte zwischen Street und Anytown aufzuspalten. Und diese Adresse wird nicht statisch sein, es kann mehr Wörter usw. geben.

Eine andere Idee wäre eine Funktion, die automatisch eine Zeichenfolge in verschiedene Felder aufteilt. Jemand hat mir gesagt, dass die Post in einigen Ländern eine API hat, die das tut. Hat USPS so etwas? Ihre Website zeigt es nicht an.

+0

USPS hat API, um zu überprüfen, ob es eine gültige Adresse ist, wenn Sie eine Adresse im richtigen Format angegeben haben.Aber das löst das Problem hier nicht –

+0

Sie meinen strrpos Funktion? (strrpos - Finde die Position des letzten Vorkommens einer Teilzeichenkette in einer Zeichenkette) –

+1

Sobald du mit "strpos" beginnst, kannst du einfach 'strlen (" keyword ")' hinzufügen, um das Ende zu erhalten Stichwort). –

Antwort

0

Es scheint, dass Sie versuchen, in umgekehrter Reihenfolge zu suchen, wie strpos gibt Position eines Strings beginnend am Anfang standardmäßig, müssen Sie den Offset auf -1 setzen und von Strlen subtrahieren.

heißt

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

jedoch wie in den Kommentaren darauf hingewiesen, kann dies nicht der beste Ansatz für das Problem sovle Sie versuchen.

0

Sie könnten so etwas tun.

$word = "Street" 

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

Je nachdem, wie viele verschiedene Wörter übereinstimmen, funktioniert die Verwendung von Regex möglicherweise besser als die Verwendung von String-Funktionen.

0

Sie können die Explode-Funktion verwenden, die eine Zeichenkette mit einem Schlüsselwort aufteilt und ein Array von Zeichenketten zurückgibt. Beispiel explodiert mit:

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

Dann $array_of_strings[0] Willen enthält 1 Main und $array_of_strings[1] Willen enthält Anytown

1

Eigentlich, was Sie tun sollen, ist in Heuhaufen für mehrere Suche nach der Stecknadel, Summieren Position und Länge der Nadel.

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

Einige Tipps:

  • Fall sensivity
  • Sie prüfen explode Funktion in einer gleichen iterativen Art und Weise verwenden können
  • Ich bin nicht sicher, aber es kann einige Adressen sein welches die Wörter "street" und "avenue" enthält