Lurifaksen Skrevet 31. august 2006 Del Skrevet 31. august 2006 (endret) Jeg har en litste over fulle navn, som jeg vil splitte opp i fornavn og etternavn. Dette ville jo vært piece of cake dersom alle navnene kun inneholdt to deler, med et mellomrom. Men nå er det nå en gang slik at noen har flere fornavn og etternavn. Noen som har noen tips til hvordan jeg kan ta høyde for det? F.eks at alt før det siste mellomrommet blir fornavn, mens kun den siste delen blir etternavn? Det jeg egentlig lurer på er om noen har peiling på nettsider hvor folk har lagt ut hendige funksjoner ala denne typen? Har også et adressefelt, hvor jeg må plukke ut posnummer og sted... Endret 31. august 2006 av Lurifaksen Lenke til kommentar
Zic0 Skrevet 31. august 2006 Del Skrevet 31. august 2006 hvordan er adressefeltet skrevet da? Et eksempel? når det gjelder navnene så kan det gjøres slikt: preg_match("#^(.*?) (.*?)$#", $navn, $output); $output[1] og $output[2] innholder navnene da Lenke til kommentar
Lurifaksen Skrevet 31. august 2006 Forfatter Del Skrevet 31. august 2006 (endret) Noen eksempler: $navn1 = "Sigmund Gallefransen"; <-- denne er grei $navn2 = "Per Ola Nordmann"; $navn3 = "Anne Grethe Strøm Erichsen"; (så på TV akkurat nå ) Jeg trenger altså en funksjon som takler alle disse. Stikkordet er at antall navn/deler er ukjent. Så vidt jeg forstår tar eksempelet ditt kun navn med et mellomrom (dvs et fornavn og et etternavn)? Er selvsagt umulig for PHP å avgjøre om en del av navnet er et etternavn eller fornavn, derfor får jeg bestemme at kun det aller siste delen er etternavn, og resten fornavn. Endret 31. august 2006 av Lurifaksen Lenke til kommentar
EirikO Skrevet 31. august 2006 Del Skrevet 31. august 2006 (endret) Dette fungerer i alle fall, men er ikke så veldig elegant... <?php $navn = "Anne Grethe Strøm Erichsen"; $navn_arr = explode(" ", $navn); for($i = 0; $i<count($navn_arr)-1; $i++) { $fornavn .= $navn_arr[$i]; $fornavn .= " "; } $etternavn = $navn_arr[count($navn_arr)-1]; print("Fornvan: $fornavn<br>"); print("Etternavn: $etternavn"); ?> Endret 31. august 2006 av EirikO Lenke til kommentar
Degeim Skrevet 31. august 2006 Del Skrevet 31. august 2006 (endret) Hva med enten: Å la brukeren skrive i to felt - ett for fornavn og ett for etternavn? eller: <?php $navn = "Anne Grethe Strøm Erichsen"; $navn_arr = explode(" ", $navn); $etternavn = $navn_arr[count($navn_arr)-1]; $navn_arr[count($navn_arr)-1]=""; $fornavn=implode(" ",$navn_arr); print("Fornvan: $fornavn<br>"); print("Etternavn: $etternavn"); ?> Tror den skal gi samme output som EirikO sin (har ikke testet den). Degeim Endret 31. august 2006 av Degeim Lenke til kommentar
kimla Skrevet 31. august 2006 Del Skrevet 31. august 2006 <?php $navn[0] = "Anne Grethe Strøm Erichsen"; $navn[1] = "Rolf Rune Andersen"; $navn[2] = "Andreas Bergstrand"; for( $i=0; $i<3; $i++ ) { $navn_div = explode( " ", $navn[$i] ); $arr_navn[ $i ][ $navn[$i] ]; } echo $arr_navn[0][2]; // Grethe echo $arr_navn[2][1]; // Andreas..... osv ?> Off, dette ble kanskje utrolig dumt, er trøtt, en stund siden jeg har php'a. Prøv å gjøre noe med koden hvis du trenger det, den er ikke testa eller noe Lenke til kommentar
Lurifaksen Skrevet 31. august 2006 Forfatter Del Skrevet 31. august 2006 Altså opplegget er at jeg allerede har en database med ca 10 000 navn, hvor alle er lagret med HELE navnet i en streng. Jeg skal nå prøve å separere fornavn og etternavn til alle i databasen. Tror antagelig Degeim sin løsning er den beste - også med tanke på ytelse (er jo ganske masse som skal konverteres...). Skal teste litt nå. Takk for alle svar. Har en bonusoppgave da: $addresse = "Biskop Gunnerus' gate 14A 0185 OSLO Norge"; Ønsket resultat: $addresse = "Biskop Gunnerus' gate 14A, Norge" (dvs postnr og sted fjernet $postnr = "0185" $poststed = "OSLO" MERK: Planen var å lage en funksjon som SØKER etter ett 4 siffret tall, dersomden finner det tar den bort tallet + neste ord og lagrer dette som egne variabler. Ja, jeg kunne sikkert funnet ut dette om jeg hadde prøvd litt (mer) selv, men jeg føler det er litt dumt å finne opp hjulet på nytt. Må da vel være noen som har holdt på med slike ting tidligere, og har lagt ut enda mer avanserte funksjoner til dette? Lenke til kommentar
PerB Skrevet 31. august 2006 Del Skrevet 31. august 2006 Jeg har en litste over fulle navn, som jeg vil splitte opp i fornavn og etternavn. Dette ville jo vært piece of cake dersom alle navnene kun inneholdt to deler, med et mellomrom. Men nå er det nå en gang slik at noen har flere fornavn og etternavn. Noen som har noen tips til hvordan jeg kan ta høyde for det? F.eks at alt før det siste mellomrommet blir fornavn, mens kun den siste delen blir etternavn? Det jeg egentlig lurer på er om noen har peiling på nettsider hvor folk har lagt ut hendige funksjoner ala denne typen? Har også et adressefelt, hvor jeg må plukke ut posnummer og sted... 6777700[/snapback] I henhold til norske regler er siste navn-element etternavn. Alle andre navnelement er fornavn og mellomnavn. Et kombinert etternavn skal alltid ha bindestrek. Dette medfører at du først må fjerne alle leading og trailing spaces. Derpå finne siste space - det som kommer etter er etternavn. Alt som kommer foran er for og mellomnavn. Lenke til kommentar
Lurifaksen Skrevet 31. august 2006 Forfatter Del Skrevet 31. august 2006 PerB: Takk for infoen. Da betyr det jo at det blir riktig å kun bruke siste "ordet" i strengen som etternavn, og alt annet som fornavn (siden jeg ikke har kolonne for mellomnavn), Lenke til kommentar
vidarlo Skrevet 1. september 2006 Del Skrevet 1. september 2006 Regexp kan enkelt søke etter tall. [0-9][0-9][0-9][0-9] finn alle firesifra tall. Det finst enklare måtar å skrive det på, men det overlatast som ei oppgåve til lesaren;) Lenke til kommentar
Jonhoo Skrevet 1. september 2006 Del Skrevet 1. september 2006 Dere gjør det jo så vanskelig... $addresse = "Biskop Gunnerus' gate 14A 0185 OSLO Norge"; $tresis_er_godt = preg_split("/\n/gis", $adresse); $adresse = $tresis_er_godt[0]; $postnr = $tresis_er_godt[1]; $poststed = $tresis_er_godt[2]; $navn = 'Anne Grethe Strøm Erichsen'; $navnarray = explode(' ', $navn); $etternavn = array_pop($navnarray); $fornavn = implode(' ', $navnarray); Lenke til kommentar
Lurifaksen Skrevet 1. september 2006 Forfatter Del Skrevet 1. september 2006 Jonhoo: Hvis du hadde lest så hadde du sett at det er en grunn til at det er vanskelig, og det er at adressen ikke har noe bestemt form. Hva hvis adressen består av 10 deler/ord? Lenke til kommentar
Jonhoo Skrevet 1. september 2006 Del Skrevet 1. september 2006 (endret) hmm.. da er jeg med Skal se hva jeg får til Rart å havne i en sånn situasjon da.... :S Men navneoppdelingen funker, eller? EDIT: ----------------------------------------------------------- Funksjonen min over vil fungere hvis adressen, postnummeret/stedet og landet er på hver sine linjer. Hvis de ikke er det så er det ikke mulig da man kan ha mellomrom i både land og poststed, noe som gjør at de ikke følger noe mønster. Endret 1. september 2006 av Jonhoo Lenke til kommentar
Lurifaksen Skrevet 1. september 2006 Forfatter Del Skrevet 1. september 2006 (endret) Ja navnegreiene er i boks. Er klar over at det ikke er mulig å få en perfekt løsning på adresse-opplegget, men er bedre med litt feil, enn å gi blaffen i alt. Ergo: 1. Poststeder med mellomrom vil bare få med første delen. 2. Alt annet som er i adresse strengen, som feks land, og en eventuell andre del av poststed får bare være i adressen. I sikkert 90% av tilfellene vil ikke dette bli noen problem, siden de aller fleste er i formen: "gateadresse 1 2101 OSLO" Endret 1. september 2006 av Lurifaksen Lenke til kommentar
jorgis Skrevet 1. september 2006 Del Skrevet 1. september 2006 \n([0-9]{4}) matcher postnummer ([a-zA-ZæøåÆØÅ]+?)\n vil matche poststed \n([0-9{4}) ([a-zA-ZæøåÆØÅ]+?)\n matcher hele linjen. Putt dem inn i en regex, jeg er for trøtt til å gjør det selv. Lenke til kommentar
Lurifaksen Skrevet 2. september 2006 Forfatter Del Skrevet 2. september 2006 (endret) Problemene er nå løst. Koden for å splitte adressen ble til slutt på ca 50 linjer - men det ble nødvendig for å takle dette skikkelig. Resultatet ble meget bra - nesten 10 000 helt håpløst formaterte adresser (alle mulige forskjellige formateringer), ble splittet opp til "gatenavn 12" "9999" "POSTSTED", med veldig få feil. jorgis: Fungerer ikke helt 100% de der. Som sagt er det forskjellig formatering i alle adressene, dermed blir det problemer hvis den støter på et femsifret tall, eller dersom det ikke er linjeskift. Endret 2. september 2006 av Lurifaksen Lenke til kommentar
jorgis Skrevet 2. september 2006 Del Skrevet 2. september 2006 jorgis: Fungerer ikke helt 100% de der. Som sagt er det forskjellig formatering i alle adressene, dermed blir det problemer hvis den støter på et femsifret tall, eller dersom det ikke er linjeskift. 6787196[/snapback] Okei, fikk ikke med meg at det ikke var linjeskift på alle. Men finnes det femsifrede postnumre? :s Fint at du fikk det til, i hvert fall. Lenke til kommentar
Kellendil Skrevet 2. september 2006 Del Skrevet 2. september 2006 finnes ikke 5 sifrede postnr, men om gateadresse og postnr er rett etter hverandre fks.. Lenke til kommentar
jorgis Skrevet 2. september 2006 Del Skrevet 2. september 2006 Evt. firesifrede husnumre, ja. Lenke til kommentar
Lurifaksen Skrevet 2. september 2006 Forfatter Del Skrevet 2. september 2006 Ja, er det som er problemet - noen har glemt mellomrom, noen og var et par utenlandske adresser med 5 sifrede postnummer. Da ble jo de fire første postnummer, og det siste sifferet poststed Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå