String opdelen
Ik zit met een moeilijke kwestie.
In een database staan adressen in 1 veld. Dus bijvoorbeeld teststraat 10 bis.
Nu wil ik dit gaan onderverdelen in drie kolommen:
straat, huisnummer en toevoeging.
Heeft iemand enig idee hoe ik de bestaande string kan exploden zodat ik deze drie delen apart op kan slaan in de database?
Toevoeging op 21/04/2012 13:00:48:
Ik heb dit al gevonden:
Code (php)
Dit geeft als output:
straat
282
Bis
Hier mis ik dus het eerste deel van de string
Gewijzigd op 21/04/2012 13:01:18 door Rolf -
Of zie ik het nou verkeerd?
Ik wil dit namelijk automatisch uit laten voeren op best veel adressen ;)
Als ik deze strings heb:
$a = Test straat 10 a;
$b = Test 10;
En als ik deze ga exploden krijg ik verschillende explodes:
Bij $a is explode[0] = test, explode[1] = straat, explode[2] = 10 en explode[3] = a.
Bij $b is explode[0] = Test, explode[1] = 10.
Met deze data kan ik dus he-le-maal niets. Via een loop kan ik deze data nooit controleren.
Gewijzigd op 21/04/2012 13:14:44 door Rolf -
Straatnaam
Stationsweg
van Vlietstraat
Joost van de Vondellaan
100% score behaal je alleen als je het handmatig doet
50+% score kan je behalen door je data te analiseren en de best mogelijke split daarop toe te passen. 50+% zal je dan alsnog met het handje moeten doen.
En die 50 % haal ik door middel van ;)?
Rolf - op 21/04/2012 13:23:33:
En die 50 % haal ik door middel van ;)?
Daar kan geen antwoord opgegeven worden, dat is geheel afhankelijk wat je aan 50% data pattern te verwerken hebt.
Heb al veel geprobeerd, maar het lukt me maar niet...
Ik ben helemaal niet thuis in de preg_match materie ;)
Bedankt!
Toevoeging op 21/04/2012 14:13:47:
Nog 1 vraag trouwens:
Soms hebben mensen ingevuld 51A.
Dus met de toevoeging aan het huisnummer vast.
Hier wordt dan niet op gematched. Is daar ook nog een toevoeging voor?
Code (php)
1
2
3
2
3
<?php
preg_match('/(?<name>.*?) (?P<digit>\d+\w*) (?P<name2>\w+)/', $tekst, $matches);
?>
preg_match('/(?<name>.*?) (?P<digit>\d+\w*) (?P<name2>\w+)/', $tekst, $matches);
?>
Nee dat pakt hij helaas niet..
Code (php)
1
2
3
2
3
<?php
preg_match('/(?<name>.*?) (?P<digit>(\d+\w*)) (?P<name2>\w+)/', $tekst, $matches);
?>
preg_match('/(?<name>.*?) (?P<digit>(\d+\w*)) (?P<name2>\w+)/', $tekst, $matches);
?>
Toevoeging op 21/04/2012 14:53:54:
Zo, ik heb een nieuwe gemaakt. Deze lijkt te werken:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$street = 'test straat 282 Bis';
preg_match('#(?P<street>[^\d]+)(?P<number>\d+.*)#', $street, $matches);
$street = trim($matches['street']);
$number = trim($matches['number']);
echo 'De straat is ' . $street . ' en het nummer is ' . $number . '.';
?>
$street = 'test straat 282 Bis';
preg_match('#(?P<street>[^\d]+)(?P<number>\d+.*)#', $street, $matches);
$street = trim($matches['street']);
$number = trim($matches['number']);
echo 'De straat is ' . $street . ' en het nummer is ' . $number . '.';
?>
Ik wou de versie van mij plaatsen maar die is in C# :)
2e Balsemienstraat 12, Rotterdam
Plein 1940-45 3, Middelburg (zie google-maps)
12e Septemberlaan 2, Noorbeek
Dus let even op hoe de syntax van adressen is!
Vooral die van Plein 1940-45 kan leuk zijn!
Eddy, grappig... als er een getal in de straatnaam zit wordt het inderdaad tricky. Maar het gaat hier helemaal in het begin al fout. Ik citeer de topicstarter: "In een database staan adressen in 1 veld". Daar gaat het fout. Er moet natuurlijk een apart veld voor de straat, het nummer en eventueel een toevoeging zijn. 3 Velden dus.
Ozzie PHP op 22/04/2012 18:09:48:
Er moet natuurlijk een apart veld voor de straat, het nummer en eventueel een toevoeging zijn. 3 Velden dus.
Enige juiste antwoord zo te zien.
Quote:
In een database staan adressen in 1 veld. Dus bijvoorbeeld teststraat 10 bis.
Nu wil ik dit gaan onderverdelen in drie kolommen:
straat, huisnummer en toevoeging.
Nu wil ik dit gaan onderverdelen in drie kolommen:
straat, huisnummer en toevoeging.
Ja, maar gaat dat dan ook wel weer de database in?