[php]Letztes Leerzeichen herausfinden...(Straße+Hausnummer trennen)

Matthiasnet

Well-known member
ID: 116869
L
14 August 2006
271
7
Hallo,

ich möchte von einer bestehenden DB, wo momentan Straße und Hausnummer zusammen in einer Spalte stehen, diese trennen.
Habe mir dazu folgendes überlegt, da die Straße mehrere Wörter enthalten kann:
- mit trim am ende und Anfang von Leerzeichen befreien
- das letzte Leerzeichen (wo eigentlich danach die Hausnummer kommt) durch % ersetzen
- mit explode in straße und hausnummer trennen...

Ist so die Beste Idde die mir eingefallen ist, nur ist mir nicht ganz klar und ich hab auch nichts darüber gefunden, wie man das letzte Leerzeichen im String ausfindig macht...

Würde mich über Hilfe bzw. passende Lektüre freuen.

Matthiasnet
 
In PHP könntest Du bspw folgendes machen:
PHP:
$adress_parts = explode(' ', $adress);
$house_number = array_pop($adress_parts);
$street = implode(' ', $adress_parts);
 
Oder...

strrpos
(PHP 4, PHP 5)

strrpos — Findet das letzte Vorkommen eines Zeichens innerhalb einer Zeichenkette

PHP:
substr($string, 0, strrpos($string, ' '));
bzw.
PHP:
substr($string, strrpos($string, ' '));

Ggf. hin und wieder ±1, hab' ich auf die Schnelle jetzt nicht aufgepasst.
 
danke für beide Vorschläge.
Habe mich für tleilax Lösung entschieden und kalppt auch.
Muss wohl noch einige DS manuell bearbeiten da das Verfahren leider nicht bei allen aufgeht :LOL:

Aber nochmal´s danke ;)
 
kann sein dass ich da jetzt falsch liege aber was ist bei einer addresse wie "landstrasse 15 B"? da würdest du dann ja mit dem letzten freizeichen nicht viel mit erreichen oder?

müsste dann vielleicht gleich anders in die db eingetragen werden oder kommt es garnicht erst zu diesem fehler?
 
stimmt schon was du sagst, genau so wie einträge wie "straße str." etc. muss ich nun alle von der Hand raussuchen und editieren.
Ich habd die DB Strucktur nicht geamcht, da ich es aber auf meine übernehmen will, muss ich es ja nun iregndwie teilen;)
 
Na ja.. dann solltest du vielleicht mal eine grobe Analyse der Spalte machen und schauen, ob sich nicht vielleicht eher ein regulärer Ausdruck lohnt, der dann solche Dinge wie "Landstrasse 15 B" berücksichtigt.
 
habs nun durch....war aber nicht nur sowas.
Manchmal war ja keine Hausnummer angegeben oder es waren 3 zahlen hinetreinander mit leerzeichen getrennt....denke ist schwerer sowas zu scripten als es einafch auf die schnelle manuell zu machen;)
 
vielleicht lohnt es sich ja doch das script und die db etwas zu editieren damit strasse und hausnummer getrennt gespeichert werden.

oder wie hast du dass jetzt bewerkstelligt?
 
Hallo @ all

...nur so eine überlegung ... da ich keine strasse kenne die im namen ziffern enthält, könnte er doch auch nach der ersten ziffer suchen und ab da trennen..
ich weiss aber nicht ob php das kann ... in clipper hab ich es damals so gemacht ;)

gruss deski
 
Man könnte es auch mit einem kleinen Regex in PHP lösen :)

PHP:
preg_match("/^([a-z\s]+)\s([0-9]+\s?[a-z]?)$/i", $adress_parts, $hits);
$street = $hits[1];
$house_number = $hits[2]

PHP Code ungetestet - RegEx Code getestet mit Kodos


PS: Da ich RegEx nicht ganz so mächtig bin möchte ich mich entschuldigen wenn es auch einfacher geht ;)