Avatar billede jammerlab Nybegynder
12. maj 2003 - 19:22 Der er 18 kommentarer og
1 løsning

While loop i en while loop - lidt trikey

Ok læs spørgsmålet godt igennem for det kan være lidt trickey at forstå... jeg har et kalender script hvor den laver et skema over de 7 dage. Det vil sige max 7 datoer i hver <td>. Så for en måned vil der være 5 rækker. Ok her kommer scriptet (Altså while loopen):

            while($day <= $days_in_month){
       
                print( "<tr>");

                for ($j=1; $j<=7; $j++)
                {

                    ?>         
                    <td width=60 height=15 valign='bottom' class='kalender_bund'><span class=normaltext>
                        <?
                      if($day==$kalender[date] && $year==$kalender[year] && $month==$kalender[month]) { echo "<center><table width=100% height=100% class=$kalender[color] cellspacing=0 cellpadding=0><td width=100% title='$kalender[tekst]'><span class=normaltext>$day</span></td></table></center>"; } else {
                      print(($day <= $days_in_month && $day > 0) ? $day_callback($year, $month, $day):  "<center><table width=100% height=100% class=ingen2 cellspacing=0 cellpadding=0><td width=100%><span class=normaltext>&nbsp;</span></td></table></center>"); }
                      ?>
                    </span></td>
                      <?
                    $day++;           
                }

                print( "</tr>");

        }

Nu er det sådan at jeg gerne vil lave en fetch_array som en while loop så hvis en dato er = med en i en database så skal den gøre noget. Men man kan ikke lave 2 while loops oven i hinanden og hvis jeg laver denne:

while(($day <= $days_in_month) && ($test = mysql_fetch_array($query))){

Så kører den kun array'en 5 gange for så er den 1. statement jo klaret. Den kører jo kun 5 gange så hvis jeg har mere end 5 datoer som jeg har skrevet noget til så dør den. :| Hvordan fanden er det lige man løser sådan et problem?
Avatar billede avminarm Juniormester
12. maj 2003 - 22:20 #1
jeg ved ikke om jeg er helt med, men hvad med at smide datoerne i et array og undersøge om en given dato så er in_array()
Avatar billede jammerlab Nybegynder
12. maj 2003 - 22:22 #2
Selve kalenderen arbejder uafhængigt af en database.... jeg bruger databasen til at specificere nogle datoer hvor der så skal være link på eller noget lignende... Så hvis det er det DU mener så forklar yderligere :P
Avatar billede avminarm Juniormester
12. maj 2003 - 22:29 #3
jeg tror det er det du tror er det jeg mener ;o)

jo altså hvis jeg har fanget det rigtigt, så putter du datoen in i DB hvis der sker noget den dato?, hvis du så putter datoerne i databasen i et array ved SQL udtræk og så sammenligner den valgte dato med arrayet ved brug af in_array,
Avatar billede jammerlab Nybegynder
12. maj 2003 - 22:30 #4
Netop det er det jeg ikke kan finde ud af hehe :)
Avatar billede jammerlab Nybegynder
12. maj 2003 - 22:31 #5
Du kan se i koden at jeg har prøvet:

$kalender det er fra et tidligere array som failede :P
Avatar billede avminarm Juniormester
12. maj 2003 - 22:44 #6
lav et array når du trækker dataene ud:

query qsv her
while($var = mysql_fetch_array($query){
$mitarray[]=$kalender[date].$kalender[month].$kalender[year]
}

mu ligger alle data i $mitarray og så brug in_array() til at se om datoen er i arrayet
Avatar billede jammerlab Nybegynder
12. maj 2003 - 23:10 #7
uha det lyder smart vidste ikke man kunne gøre det sådan... well... in_array() hvordan skal den bruges (ved jeg kunne smutte forbi php.net men jeg er så skide doven :P)
Avatar billede avminarm Juniormester
13. maj 2003 - 12:12 #8
sådan:
$os = array ("Mac", "NT", "Irix", "Linux");
if (in_array ("Irix", $os)) {
    print "Got Irix";
}
if (in_array ("mac", $os)) {
    print "Got mac";
}


og lur lige lidt på http://www.php.net/manual/en/function.in-array.php der er ret gode eksempler
Avatar billede jammerlab Nybegynder
13. maj 2003 - 14:14 #9
Puuhhaa... det er altså en tand for forvirrende for mig :| Jeg kan slet ikke se op eller ned på det...
Avatar billede avminarm Juniormester
15. maj 2003 - 11:11 #10
ok se på denne stump:
$os = array ("Mac", "NT", "Irix", "Linux"); //her er vores array/liste over operativsystemer
if (in_array ("Irix", $os)) { //HVIS "Irix" indgår i arrayet/listen så skriv det!
    print "HURRA - Irix findes i listen";
}

Prøv at kopiere det over i en php fil og leg lidt med det - det svarer bare til at man tjekker om onget står på en liste eller ej
Avatar billede jammerlab Nybegynder
15. maj 2003 - 13:56 #11
ja okay det jeg prøver lige at lege lidt med det så...
Avatar billede jammerlab Nybegynder
15. maj 2003 - 14:02 #12
hmm nu er det jo lige at der er flere kriterier der skal være i array for at det er sandt så kan jeg gøre sådan her:
$os = array ("Mac", "NT", "Irix", "Linux"); //her er vores array/liste over operativsystemer
if (in_array ("test && test && test", $os)) { //HVIS "Irix" indgår i arrayet/listen så skriv det!
    print "HURRA - Irix findes i listen";
}

Altså noget i den stil?
Avatar billede jammerlab Nybegynder
15. maj 2003 - 15:30 #13
Jeg kan simpelthen ikke få det til at virke :| Har prøvet og lege med det som du siger og brugt midtarray men det ser sq ikke ud til at gemme en skid :|

        $query = mysql_query("select * from kalender") or die(mysql_error());
       
        while($var = mysql_fetch_array($query)) {
        $midtarray[]=$kalender[date];
        }
       
        if(in_array ("21", $midtarray)) { echo "hej"; }
            while($day <= $days_in_month){
       
                print( "<tr>");

                for ($j=1; $j<=7; $j++)
                {

                    ?>         
                    <td width=60 height=15 valign='bottom' class='kalender_bund'><span class=normaltext>
                        <?
                       
                        print(($day <= $days_in_month && $day > 0) ? $day_callback($year, $month, $day):  "&nbsp;");
                       
                        if (in_array ("$day", $midtarray)) {
                echo "hej";
            }
                      ?>
                    </span></td>
                      <?
                    $day++;           
                }

                print( "</tr>");

        }
Avatar billede avminarm Juniormester
17. maj 2003 - 23:30 #14
jeg troro måske det er fordi tal ikke skal stå i "" prøv med if(in_array (21, $midtarray)) { echo "hej"; }
Avatar billede jammerlab Nybegynder
18. maj 2003 - 00:32 #15
Har rettet den nu man der sker ikke rigtig noget :P
http://212.242.60.87/amiciny/kalender.php
Avatar billede roenving Novice
18. maj 2003 - 00:54 #16
Det du har brug for er flere niveauer:

I første linje skal den jo udskrive nogle blanke (oftest) -- ligeledes i sidste linje:

Maj 2003:
  --  --  --  01  02  03  04
  05  06  07  08  09  10  11
  12  13  14  15  16 ...

  26  27  28  29  30  31  --

Derudover vil du også skrive tekster, når de matcher ...

Mit forslag ville være at opbygge et tre-dimensionelt array:

xx            x0  x1  x2  x3  x4  x5  x6
y0 z0        --  --  --  01  02  03  04
y0 z1        --  --  --  Pe  --  Ha  --


altså sådan, at array
$tekst[0][0][0]="--"
$tekst[0][0][1]="--"

$tekst[0][1][0]="--"
$tekst[0][1][1]="--"

$tekst[0][2][0]="--"
$tekst[0][2][1]="--"

$tekst[0][3][0]="01"
$tekst[0][3][1]="Pe"

$tekst[0][4][0]="02"
$tekst[0][4][1]="--"

$tekst[0][5][0]="03"
$tekst[0][5][1]="Ha"

$tekst[0][6][0]="04"
$tekst[0][6][1]="--"

$tekst[1][0][0]="05"
$tekst[1][0][1]="--"

Så kan du starte med at opbygge de tomme fra starten -- du kan jo finde weekday og dem mellem mandag og weekday for den 1. skal være tomme, så skal din grundlæggende løkke bare finde ud af, at x-index skal skifte til 0 efter 6 samtidig med at y-index skal skifte til en mere ...

Bagefter kan du så løbe igennem og checke for matches i z-index 0, som kan befolke evt. sammenfald i z-index 1

Håber du kan følge mig =:~]
Avatar billede jammerlab Nybegynder
18. maj 2003 - 01:02 #17
@.@ !!! Ej okay roenving jeg kan IKKE følge dig er du da gal man !!!
Avatar billede roenving Novice
18. maj 2003 - 01:28 #18
Du har 35 celler i tabellen

0-6 foroven
og
0-4 langs siden

Hver af disse celler indeholder en dato (eller evt. ingen dato i første og sidste linje).

Din kalender indeholder nogle forskellige events, så ved hjælp af datoen kan du checke om specielle attributter (baggrunde og links) skal placeres der ved at sammenligne med de forskellige kalender-entries -- in_array er sikkert udmærket, men jeg kender overhovedet ikke PHP, så det ved jeg ikke ...

Hvis du først lavet et grid (som to-dimensional array) som skitseret ovenfor -- og overser den tredje dimension --, kan du:

<table>
<?
for ($y=0;$y<5;$y++){
?>
<tr>
<?
  for ($x=0;$x<7;$x++){
?>
<td>
<?
    if ($tekst[$y][$x]=="")){
?>
      //baggrund vise ingen dag og ikke udskrive dato til tabellen
<?
    }
    elseif (in_array($tekst[$y][$x],$match_days)){
?>
      //Baggrund vise kampdag-farve, link omkring datoen og en tekst som tooltip (title i linket)
<?
    }
    elseif (in_array($tekst[$y][$x],$nomatch_days)){
?>
      //Baggrund vise 'kan ikke spille'-farve samt dato
<?
    }
    elseif (in_array($tekst[$y][$x],$possiblematch_days)){
?>
      //Baggrund vise 'måske kampdag'-farve, link omkring datoen og en tekst som tooltip (title i linket)
<?
    }
?>
</td>
<?
  }
?>
</tr>
<?
}
?>
</table>
Avatar billede jammerlab Nybegynder
13. juni 2003 - 18:56 #19
Er begyndt fra bunden og har lidt problemer med in_array som kommer i et nyt spørgsmål
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