Avatar billede eikhorsholm Nybegynder
02. november 2008 - 15:35 Der er 4 kommentarer og
1 løsning

Benyt tidligere deklareret array i funktion.

Jeg er i gang med at lave en funktion som skriver datoer ud pænt og dertil benytter heg to arrays med danske navne på dage og måneder.
Det virker fint hvis jeg har arrays'ne indeni funktionen, men jeg vil gerne have dem udenfor sp jeg ikke skal oprette dem hver eneste gang funktionen kaldes, noget ala:

$days = array(1 => "mandag",
              2 => "tirsdag",
              3 => "onsdag",
              4 => "torsdag",
              5 => "fredag",
              6 => "lørdag",
              7 => "søndag");

$months = array(1 => "januar",
                2 => "februar",
                3 => "marts",
                4 => "april",
                5 => "maj",
                6 => "juni",
                7 => "juli",
                8 => "august",
                9 => "september",
                10 => "oktober",
                11 => "november",
                12 => "december");

function get_relative_time($timestamp) {
    $diff = time() - strtotime($timestamp);
    if ($diff < 60)
        return $diff . " sekund" . (($diff != 1) ? "er" : "") . " siden";
    $diff = round($diff / 60);
    if ($diff < 60)
        return $diff . " minut" . (($diff != 1) ? "ter" : "") . " siden";
    $diff = round($diff / 60);
    if ($diff < 24)
        return $diff . " time" . (($diff != 1) ? "r" : "") . " siden";
    $diff = round($diff / 24);
    if ($diff < 7)
        return $diff . " dag" . (($diff != 1) ? "e" : "") . " siden";
    $diff = round($diff / 7);
    if ($diff < 4)
        return $diff . " uge" . (($diff != 1) ? "r" : "") . " siden";
    return $days[date("N", strtotime($timestamp))] ." den ". date("j", strtotime($timestamp)) .". ". $months[date("n", strtotime($timestamp))] ." '". date("y", strtotime($timestamp));
}
Avatar billede erikjacobsen Ekspert
02. november 2008 - 15:39 #1
Tag dem med som parametre, eller erklær dem inde i funktionen, hvis de kun skal bruges der, eller:

function get_relative_time($timestamp) {
  global $days,$months;
  ...
Avatar billede eikhorsholm Nybegynder
02. november 2008 - 15:49 #2
Super, virkede med global!

Da funktionen bliver kaldt flere gange, så bliver de vel oprettet det antal gange funktionen bliver kaldt, ikke?

Du må meget gerne lave et svar, så pointene er dine.
Avatar billede erikjacobsen Ekspert
02. november 2008 - 15:54 #3
Det kan være, men det koster nu næppe noget særligt.
Jeg samler slet ikke på point, tak. Svar selv, accepter dit eget svar.
Avatar billede eikhorsholm Nybegynder
02. november 2008 - 16:15 #4
Ok, jamen så siger jeg mange tak!
Men tror du ikke det koster mere end hvis de blot erklæres globalt?
Avatar billede erikjacobsen Ekspert
02. november 2008 - 17:58 #5
Generelt vil jeg overlade til compileren (fortolkeren) at optimere det passende. I princippet kan den se at det bliver læst og ikke skrevet i. Om lige PHP - eller en af "optimizers" der findes - kan det, ved jeg ikke. Men den pæne løsning er under alle omstændigheder at smide det dato-halløj i en klasse - og der kan man sikre at ting udføres efter behov.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester