Avatar billede venchil Nybegynder
23. april 2006 - 14:38 Der er 20 kommentarer og
1 løsning

Problem med array og 0'er

Jeg har et array med nogle nøgler:

$maaned = array(01 => "januar",
                02 => "februar",
                03 => "marts",
                04 => "april",
                05 => "maj",
                06 => "juni",
                07 => "juli",
                08 => "august",
                09 => "september",
                10 => "oktober",
                11 => "november",
                12 => "december"
                );

Men hvis jeg vil udskrive alle værdierne i arrayet, kan jeg jo ikke bare sige:

for ($x = 0; $x < count($maaned); $x++) {
echo $maaned[$x];
echo "<br>";
}

For så ville jeg jo ikke få 0'et med i alle tal under 10... Jeg har prøvet med følgende:

        for ($x = 0; $x < 20; $x++) {
            if (strlen($x) < 2) {
                echo $maaned[0$x];
                echo "<br>";
            }
            else {
                echo $maaned[$x];
                echo "<br>";
            }
        }

Men det lader ikke til at virke... Er der nogen der har en løsning?
Avatar billede Slettet bruger
23. april 2006 - 14:44 #1
Du kan rbuge str_pad til at få 0'er:

str_pad($maaned[$x], 2, '0', STR_PAD_LEFT);
Avatar billede erikjacobsen Ekspert
23. april 2006 - 14:46 #2
Du skal ikke sætte 0 foran:

$maaned = 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"
                );

og nu kan du bruge en forløkke fra 1 til 12:  for ($i=1;$i<=12;$i++) print $maaned[$i];
Avatar billede venchil Nybegynder
23. april 2006 - 14:57 #3
<?php

$maaned = array(01 => "januar",
                02 => "februar",
                03 => "marts",
                04 => "april",
                05 => "maj",
                06 => "juni",
                07 => "juli",
                08 => "august",
                09 => "september",
                10 => "oktober",
                11 => "november",
                12 => "december"
                );
               
        for ($x = 0; $x < 20; $x++) {
            str_pad($maaned[$x], 2, '0', STR_PAD_LEFT);
            echo "<br>";
        }
?>

Ser ikke ud til at virke... Jeg vil helst undgå at bruge erikjacobsens løsning, da jeg har en masse db udtræk som afhænger lidt af de 0ller
Avatar billede duejensen Nybegynder
23. april 2006 - 15:14 #4
Hvad så med :

<?php
$maaned = array(01 => "januar",
                02 => "februar",
                03 => "marts",
                04 => "april",
                05 => "maj",
                06 => "juni",
                07 => "juli",
                08 => "august",
                09 => "september",
                10 => "oktober",
                11 => "november",
                12 => "december"
                );

        foreach ($maaned as $key => $value)  {
          echo $value;
      echo "<br>";
        }
?>
Avatar billede venchil Nybegynder
23. april 2006 - 15:19 #5
Det var lige det jeg søgte :D - du må gerne lægge et svar, duejensen :D
Avatar billede duejensen Nybegynder
23. april 2006 - 15:20 #6
En simpel men effektiv løsning
Avatar billede venchil Nybegynder
23. april 2006 - 15:21 #7
Nemlig ;)
Avatar billede erikjacobsen Ekspert
23. april 2006 - 15:52 #8
duejensens forslag synes nu at mangle lidt. Hvor er august?  Prøv som jeg skriver.
Avatar billede duejensen Nybegynder
23. april 2006 - 16:04 #9
hmm, det var jo interessant.

Nå, men da venchil har en begrundelse, med en masse db udtræk med nuller, er behovet måske i virkeligheden:

$maaned = array("01" => "januar",
                "02" => "februar",
                "03" => "marts",
                "04" => "april",
                "05" => "maj",
                "06" => "juni",
                "07" => "juli",
                "08" => "august",
                "09" => "september",
                "10" => "oktober",
                "11" => "november",
                "12" => "december"
                );

        foreach ($maaned as $key => $value)  {
          echo $value;
      echo "<br>";
        }
Avatar billede erikjacobsen Ekspert
23. april 2006 - 16:06 #10
Ja, og det kan være han ikke har brug for 0-erne alligevel. Men med ".." omkring så er august da med igen.
Avatar billede venchil Nybegynder
23. april 2006 - 16:12 #11
Ja... Hvor er august egentlig?
Avatar billede duejensen Nybegynder
23. april 2006 - 16:12 #12
Og at august forsvinder, har følgende forklaring:

Når man skriver et heltal med et 0 foran, (01, 02, 03, 04, 05, osv), angiver man at tallet skal opfattes oktalt.
Det går godt op til og med 07,
men
08 er ikke et lovligt oktalt tal - det bliver konverteret til 0
09 er heller ikke et lovligt oktalt tal, det bliver også konverteret til 0.
Ergo har både "august" og "september" samme key, og september overskriver så august.
Avatar billede venchil Nybegynder
23. april 2006 - 16:13 #13
OK, hvordan fixer jeg så dette?
Avatar billede duejensen Nybegynder
23. april 2006 - 16:16 #14
Hvis du absolut skal bruge 01 i stedet for 1, 02 i stedet for 2, er det vel fordi du skal sammenligne med "01", "02", "03" etc ?

Ergo, må du benytte "01" => "januar", "02" => " "februar" etc, og så løser det problemet.
Avatar billede erikjacobsen Ekspert
23. april 2006 - 16:17 #15
Du har fået 2 forslag nu, venchil. Skal du have mere vejledning så må du fortælle hvorfor du mener du skal have "0" foran.
Avatar billede venchil Nybegynder
23. april 2006 - 17:07 #16
duejensen:

$maaned = array(01 => "januar",
                02 => "februar",
                03 => "marts",
                04 => "april",
                05 => "maj",
                06 => "juni",
                07 => "juli",
                08 => "august"
                09 => "september",
                10 => "oktober",
                11 => "november",
                12 => "december"
                );

Skal laves om til?

erikjacobsen: Jeg trækker ud fra min mysql database:

$getnews = mysql_query("SELECT *, UNIX_TIMESTAMP(tid) AS tid FROM nyheder WHERE MONTH(tid) = '" . $tid[0] . "' AND YEAR(tid) = '" . $tid[1] . "'") or die("MySQL-fejl: ".mysql_error());

Måske kunne man lave en

if (strlen($tid[0]) < 2) {
$getnews = mysql_query("SELECT *, UNIX_TIMESTAMP(tid) AS tid FROM nyheder WHERE MONTH(tid) = '" . 0$tid[0] . "' AND YEAR(tid) = '" . $tid[1] . "'") or die("MySQL-fejl: ".mysql_error());
}

???
Avatar billede duejensen Nybegynder
23. april 2006 - 17:19 #17
Ja, du skal enten lave om til:

$maaned = array("01" => "januar",
                "02" => "februar",
                "03" => "marts",
                "04" => "april",
                "05" => "maj",
                "06" => "juni",
                "07" => "juli",
                "08" => "august"
                "09" => "september",
                "10" => "oktober",
                "11" => "november",
                "12" => "december"
                );
altså sætte ".." omkring de to cifre, eller også må du fjerne de foranstillede nuller,


Din sql ovenfor viser at du bruger MONTH(...) fra mysql - mig bekendt giver den nummeriske månedsnumre - uden foranstillede 0'er

Bruger du  DATE_FORMAT("%m", tid) får du strenge (med foranstillede numre).
Avatar billede venchil Nybegynder
23. april 2006 - 17:20 #18
Jeg går over til ikke at skrive 0 foran... Men kan min strlen() ting så bruges?
Avatar billede duejensen Nybegynder
23. april 2006 - 17:30 #19
Nej din strlen konstruktion kan ikke bruges.

fjerner du nullerne foran kan du stadig bruge

foreach ($maaned as $key => $value)  {
          echo $value;
      echo "<br>";
        }

eller du kan bruge erikjacobsens løsning:

for ($i=1;$i<=12;$i++) print $maaned[$i] . "<br>";
Avatar billede erikjacobsen Ekspert
23. april 2006 - 18:58 #20
Hvad er dit tid-felt for en type. Det virker omstændeligt at lave det om til unix_timestamp.
Avatar billede venchil Nybegynder
23. april 2006 - 18:59 #21
Det har jeg også gjort :)

I kan se det færdige resultat af mit (og jeres?) script her:

http://madskjaer.dk/images/madskjaerv2/arkiv.php?tid=12-2006-1
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