Toon posts:

[php] var splitsen *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste mede Tweakah,

Ik heb een script geschreven om in PHP om een naam dat in de variabele $naam staat (b.v. van der boom) op te splitsen in de variabelen $naam en $voorvoegsel.

Het script geeft ten alle tijden de achternaam weer maar wil de voorvoegsels niet scheiden en in de variable zetten
PHP:
1
<?//$Naam converteren in $Voorvoegsels en $achternaam$uitzonderingen = array ( 'v/d', 'v.d.', 'van', 'der', 'de', 'het', 'van der', 'vd', 'van de', 'der', 'den',);if (strstr ($naam, ' ') == false) { //Als er geen voorvoegsel voor komt.} else {     $temp_naam = explode(" ", $naam);    $naam = "";    $eerste_stuk = true;    for ($i = 0; $i < count($temp_naam); $i++) {        $is_uitzondering = false;        for ($j = 0; $j < count($uitzonderingen); $j++) {            if ($temp_naam[$i] == $uitzondering[$j]) {                $is_uitzondering = true;            }            if ($eerste_stuk == true) {                $eerste_stuk == false;                for ($k = 0; $k < $j; $k++) {                    $voorvoegsel = $temp_naam[$j];                    }            } else {                $naam = $temp_naam[$i];            }        }    }}echo "$voorvoegsel - $naam<br>";?>

Kunnen jullie mij helpen?
Alvast bedankt.

P.S. Als er dingen niet duidelijk zijn zeg het maar dan pas ik het ff aan.

edit:


Toch wel handig als ik voortaan een iets duidelijker topic maakt excuses.

Hmm op de een of andere duistere manier is i versprongen.

Verwijderd

Inderdaad en ook handig als je de code leesbaar laat, dus die mag je wel even opnieuw plakken..

Verwijderd

zet eerst je code ff duidelijk onder elkaar, dit is onleesbaar

  • Bender
  • Registratie: Augustus 2000
  • Laatst online: 17-08 16:09
explode()

  • 2
  • Registratie: November 2000
  • Laatst online: 31-03 13:52

2

Dit krijg je echt nooi waterdicht. Denk maar aan iemand die Jan Peter Schuivenzande van der Knaap Ringelstein heet.

Verwijderd

Topicstarter
hmmm klinkt leuk die naam :)

maare de voornamen zijn er al uit dus dat probleem is "gelukkig" opgelost

en als er in een achternaam van stuivenzan van ringelstein heet dan geld alleen die van nog als voorvoegsel, maar inderdaad denk ik dat je met dit scriptje op je gat gaat. Maar gelukkig staan er niet van die namen in. en alle 6000 record worden met de hand nagekekn :P

Verwijderd

$eerste_stuk == false;

die test je, terwijl je um wilt setten


verder doet je een loop over $k, maar daarin gebruik je $j, dat lijkt me niet nuttig.. mocht die loop meer dan eens doorlopen worden dan blijft $voorvoegsel $temp_name[$j], dus is die for-loop nogal useless

Verwijderd

Topicstarter
juist daar moet ik dan nog maar is ff over nadenken.

die j$ moet inderdaad een k$ zijn. viel mij ook al op eigelijk dus heb ik hem maar gelijk veranderd.

Als iemand sugesties heeft? ik weet het niet meer :'(

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 02-06 23:18
zoiets bedoel je??
PHP:
1
<?$uit = array('v','v.','van','vd','v/d','vd','v.d.','v.d','de','la','het','\'t','den','d\'n','der');$nm = explode(" ", stripslashes($naam));$j = count($nm);$voor = "";$achter = "";$a = "-1";$s = true;for ($i=0; $i<$j; $i++){  if (in_array($nm[$i], $uit) &amp;&amp; $s) { $voor .= "$nm[$i] "; $a = $i + 1; }  else { $s = false; }}for ($k=$a; $k<$j; $k++){  $achter .= "$nm[$k] ";}echo "$voor - $achter";?>

[edit]
code beetje aangepast

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 23-08 13:31

Tjark

DON'T PANIC

En als je het een beetje 'heuristisch' (oid) aanpakt?

Je neemt aan dat de laatste item in de exploded array iig een/de achternaam is.
Daarna check je van voor naar achter of het element 3 of minder letters heeft: dan voorvoegsel.
Komt je een element tegen met meer dan 3 letters: voeg toe als achternaam en vanaf dat punt ha je ook niet meer kijken naar voorvoegsels.

Op die manier vang je dus ook:
Pedro de la Rosa (ok: maar niet als je het schrijft als dela)
Claus von Amsberg
Jan Vennegoor of Hesselink


disclaimer: code niet gechecked. gaat om 't idee
PHP:
1
<?$temp_naam = explode(" ", $naam);$nrelements = count($temp_naam);$naam = '';$searching = true;for ($i = 0; $i < $nrelements-1;$i++) {  if(strlen($temp_naam[$i]) <=3 &amp;&amp; $searching==true) {    $voorvoegsel .= ' '.$temp_naam[$i];  } else {    $naam .= $temp_naam[$i];    $searching = false;  }}$naam .= $temp_naam($nrelements-1);?>

netschaap verklootte de opmaak :(

*insert signature here


Verwijderd

Topicstarter
Mensen ik heb het werkend dankzij jullie!!!!!!

Jullie zijn echte helden bedankt!!!!

:D
Pagina: 1