Gå til innhold

Splitte fullt navn opp i fornavn og etternavn?


Anbefalte innlegg

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 av Lurifaksen
Lenke til kommentar
Videoannonse
Annonse

Noen eksempler:

 

$navn1 = "Sigmund Gallefransen"; <-- denne er grei

$navn2 = "Per Ola Nordmann";

$navn3 = "Anne Grethe Strøm Erichsen"; (så på TV akkurat nå :p)

 

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 av Lurifaksen
Lenke til kommentar

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 av EirikO
Lenke til kommentar

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 av Degeim
Lenke til kommentar

<?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

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

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

hmm.. da er jeg med :)

Skal se hva jeg får til :p

 

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 av Jonhoo
Lenke til kommentar

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 av Lurifaksen
Lenke til kommentar

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 av Lurifaksen
Lenke til kommentar
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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...