[PHP] multi-dimensional array icm for lus

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ID-College
  • Registratie: November 2003
  • Laatst online: 15:55
Beste mensen,

Ik heb een probleem waar ik even zo 1,2,3 niet uitkom. Ik ben bezig met een calendar. De kalender geeft dagen weer in de maand. D.m.v een for lus worden de dagen geladen die in de betreffende maand vallen.
PHP:
1
2
3
for($day=1,$days_in_month=gmdate('t',$first_of_month); $day<=$days_in_month; $day++,$weekday++){
//hier wordt de data geschreven naar de tabel
}

Per dag kan in de kalender een taak zitten (en natuurlijk meerdere taken per dag). Dmv een mysql query haal ik de unieke dagen op. Deze dagen moeten een andere kleur krijgen in de tabel. De resultaten vang in op in een array die tweedimensionaal is:
Array ( [0] => Array ( [0] => 2010 [1] => 12 [2] => 08 ) [1] => Array ( [0] => 2010 [1] => 12 [2] => 10 ) [2] => Array ( [0] => 2010 [1] => 12 [2] => 11 ) [3] => Array ( [0] => 2010 [1] => 12 [2] => 16 ) [4] => Array ( [0] => 2010 [1] => 12 [2] => 21 ) [5] => Array ( [0] => 2010 [1] => 12 [2] => 25 ) )
Zoals je ziet: een array heeft daarin het jaar, de maand en de dag.
Echter, wat ik wil doen, is per datum het hokje kleuren. De multidimensionale array moet dus in de for lus uitgelezen worden, en indien de dag, maand en jaar matcht, dan wil ik een iets met de tabel doen.
Ik lees de array's uitlezen met
PHP:
1
2
3
4
5
6
7
    if(!empty($highlight_days)){
        foreach ($highlight_days as $firstr_array) {
            foreach ($firstr_array as $secondr_array) {
                    print $secondr_array; //resultaat hiervan staat hierboven.
            }
        }
    }

Echter, ik heb geen idee hoe ik dit kan matchen. Wie kan helpen of een hint geven? Als ik de foreach's in de for loop zet wordt deze ook weer geloopt. Dat krijg ik niet voor elkaar.
Heeft iemand van jullie een idee welke constructie ik moet toepassen of een hint? Ik kom er echt niet uit en heb nou al genoeg tijd hieraan verspilt :/

Acties:
  • 0 Henk 'm!

  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 19-09 20:56
volgens mij ben jij op zoek naar next(). hiermee kan je zelf de iterator een plekje opschuiven. als ik dit niet op mn mobiel typte had ik er een voorbeeld bij gedaan ;)

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


Acties:
  • 0 Henk 'm!

  • ID-College
  • Registratie: November 2003
  • Laatst online: 15:55
Ik heb er even naar gekeken, maar met next() krijg ik hem wel werken met 1 array. Ik ben nu aan het uitzoeken hoe het zit met multidimensionale arrays.. Daar ben ik helaas nog niet uit. Next kun je alleen op een array toepassen, en niet op een array binnen een array.. Althans, die functie heb ik nog niet :)

Acties:
  • 0 Henk 'm!

  • johnkeates
  • Registratie: Februari 2008
  • Laatst online: 04-07 16:30
Als je niet zuinig programmeert kan je gewoon de diepere array kopieren naar een eendimensionale array. Dan heb je dus dat probleem niet. Of het zuinig en snel is, is een tweede..

Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 19:08

BCC

Ja kan PHP Arrays toch ook als hashmaps gebruiken? Dat lijkt me hier een stuk overzichtelijker.

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 10:43

Matis

Rubber Rocket

Je kunt toch gewoon een recursive functie maken, met daarin de huidige positie en de array-diepte. Je kunt in de volgende functie springen als de value een array is :)

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • ID-College
  • Registratie: November 2003
  • Laatst online: 15:55
johnkeates schreef op woensdag 08 december 2010 @ 20:59:
Als je niet zuinig programmeert kan je gewoon de diepere array kopieren naar een eendimensionale array. Dan heb je dus dat probleem niet. Of het zuinig en snel is, is een tweede..
Daar zat ik idd aan te denken. Dan krijg ik alleen iets van:
Array (
[m] = > 12, 12, 12, 12,12
[d] => 8, 11, 14, 18
[y] => 2010, 2010, 2010, 2010
)
Is dit gewenst of een goede oplossing? mannen..?
Matis schreef op woensdag 08 december 2010 @ 21:13:
Je kunt toch gewoon een recursive functie maken, met daarin de huidige positie en de array-diepte. Je kunt in de volgende functie springen als de value een array is :)
Kan je miss een voorbeeld geven hiervan? wat bedoel je met: in de volgende functie springen?

[ Voor 27% gewijzigd door ID-College op 08-12-2010 21:21 ]


Acties:
  • 0 Henk 'm!

  • ID-College
  • Registratie: November 2003
  • Laatst online: 15:55
Even een update:
Ik heb het op een andere manier opgelost. Ik heb één array gemaakt en daarmee heb ik de huidige dag vergeleken met de dagen die in de array stonden. Hoewel hij minder netjes is, ben ik nu toch even van dit euvel verlost. Bedankt voor jullie hulp! :)

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 10:43

Matis

Rubber Rocket

Een recursieve functie is in dit specifieke geval niet noodzakelijk, omdat je weet dat je array gevuld is met daarin een array van drie items (jaar, maand, dag). Op die manier zou je het ook zo kunnen doen.

Een voorbeeldje, let wel, dit is pseudo-code, je zult zelf nog wat aan moeten passen om het voor jou werkend te krijgen:
PHP:
1
2
3
4
5
6
foreach($highlight_days as $hd)
{
  //mktime(hour, min, sec, month, day, year);
  $timestamp = mktime(0, 0, 0, $hd[1], $hd[2], $hd[0]);
  // $timestamp is nu gevuld met de timestamp van de eerste seconde (00:00:00) van de gewenste dag
}

Zorg wel dat je eerst je huidige tijdzone goed zet middels date_default_timezone_set ;)
Je kunt nu met $timestamp verder rekenen in PHP ( zie ook Date ).

If money talks then I'm a mime
If time is money then I'm out of time

Pagina: 1