08. april 2007 - 17:03Der er
8 kommentarer og 1 løsning
Returnér domæne fra streng
Jeg har en streng der indeholder et domænenavn med et vilkårligt antal niveauer (subdomæne-navne).
Hvordan udtrækker jeg lettest del-strengen indeholdende de to øverste domænenavne (dvs. top-level domænet og det registrerede domænenavn umiddelbart derunder)?
Er strengen f.eks. "mit.eget.domæne.dk", skal funktionen altså returnere "domæne.dk".
Pointene går til den der leverer den simpleste (korteste) løsning.
<? function toplevelDomain($domain) { $toplevel = strrchr($domain,'.'); //finder sidste punktum i $domain, hvilket retunerer toplevel domænet if($domain_name = str_replace('.','',strrchr(substr($domain,0,-strlen($toplevel)),'.'))) return $domain_name . $toplevel; //hvis domænet har nogle subs fjernes de return $domain; //ellers returneres blot domænet }
>showsource Præcis - man skal klart benytte sig af den mindst ressourcekrævende funktion.
En hurtig tidstagning viser mit eksempel køres på 0.00019097328186 og showsources køres på 0.0123150348663
Det gør jo ikke den store forskel, men i længden er det småting som dette man kan mærke. kommer dog virkelig an på, hvad man laver og hvor tit det skal bruges.
men jo, grunden til showsource's løsning er "langsom" er han bruger array_search, en liniær søgning i et array kan aldrig være hurtig, og når du ved du altid skal bruge de sidste 2 pladser så vinder sizeof klart da denne property er direkte tilgængelig på arrayet.
Jeg opdagede selv denne her tilfældigt på php.net:
preg_match('/[^.]+\.[^.]+$/', $input, $output);
Kortere kan det næppe blive? Jeg hæver indsatsen til 100 point og lukker spørgsmålet kl. 24.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.