[PHP]3d array genereren uit database

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • gizmo9003
  • Registratie: November 2000
  • Laatst online: 20-09 13:10

gizmo9003

Go For It!

Topicstarter
Ik heb een database, met de volgende kolommen:
[wie] [week] [dag] [uur]

Nu wil ik die informatie zo in een array krijgen, dat als ik de velden week,dag en uur als indices meegeef, ik de persoon eruit krijg.

Dus stel de naam van mijn variabele is array, dan wil ik:
array[42][4][2] gebruiken om de persoon te krijgen, die in week 42 op dag 4 uur 2 heeft ingevuld.

Hiervoor heb ik zelf dit bedacht:
code:
1
2
3
4
5
6
7
8
while ($row = mysql_fetch_assoc($result))
    {
    $dag = $row['dag'];
    $week = $row['week'];
        $uur = $row['uur'];
    $array[$week][$dag][$uur]= $row['wie'];
    $a++;
    }


Maar dit werkt niet.
Het werkt wel als ik alleen $week meegeef, dus met $array[$week] = $row['wie'];

Iemand een idee waardoor dit komt?

tjah..


Acties:
  • 0 Henk 'm!

  • osorkon!
  • Registratie: September 2006
  • Laatst online: 10-01 18:56
Het zou moeten werken: misschien kan je beter
PHP:
1
2
3
4
5
6
7
8
9
10
while ($row = mysql_fetch_array($result))
    {
    $dag = $row['dag'];
    $week = $row['week'];
        $uur = $row['uur'];
    $array[$week][$dag][$uur][]= $row['wie'];
    }
echo '<pre>';
print_r($array); //voor te kijken hoe de array wordt opgevuld.
echo '</pre>';


En de output eens controlen.

[ Voor 13% gewijzigd door een moderator op 08-10-2008 14:13 . Reden: Je code tags werkten niet. :? ]


Acties:
  • 0 Henk 'm!

  • Pete
  • Registratie: November 2005
  • Laatst online: 07-09 17:51
Wat zie je als je print_r($array); doet?

En wat doet je a++; statement in je code?

beetje laat

[ Voor 15% gewijzigd door Pete op 08-10-2008 14:17 ]

petersmit.eu


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Wat betekent "het werkt niet"? Wat gebeurt er dan? Voor zover ik kan zien bouw je je array op de goede manier op.

Overigens vind ik dit een vrij aparte manier van werken. Als iemand 8 uur op een dag gewerkt heeft, dan staat hij dus met 8 records in de database? Waarom niet gewoon een start- en eindtijd (en -datum, eventueel) zodat je de rest kan berekenen? Dat betekent wel meteen ook dat je deze array beter weg kan gooien en een andere manier zal moeten zoeken om het op te slaan in je applicatie.

Trouwens, moet je voor veel tijdstippen controleren wie er op dat moment gewerkt heeft? Als dat niet zo is, kun je dan niet beter een query doen om die persoon op te vragen?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • gizmo9003
  • Registratie: November 2000
  • Laatst online: 20-09 13:10

gizmo9003

Go For It!

Topicstarter
Hmm die opbouw van het array zit dan wel goed idd,
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Array
(
    [42] => Array
        (
            [3] => Array
                (
                    [5] => frank
                )

        )

    [43] => Array
        (
            [3] => Array
                (
                    [1] => piet
                )

        )

)


Roep ik dan op de verkeerde manier het array aan?
echo array[42][3][1]; moet toch gewoon piet geven?

Edit: probleem gevonden. Een bug met dubbele quotes in een echo, waarbinnen het array niet werkt.
meer informatie: http://bugs.php.net/bug.php?id=15378

Bedankt in ieder geval!

[ Voor 16% gewijzigd door gizmo9003 op 08-10-2008 14:21 ]

tjah..


Acties:
  • 0 Henk 'm!

  • winkbrace
  • Registratie: Augustus 2008
  • Laatst online: 24-08 15:17
wat dacht je van:

select wie
from tabel
where dag = $dag
and week = $week
and uur = $uur

Maar misschien heb je wel een goede reden om de tabel in zijn geheel naar php te willen kopieren en in zo'n array te zetten. ;)

Ik kan geen fouten zien in je code. Retourneert je query wel wat je verwacht?

Acties:
  • 0 Henk 'm!

  • osorkon!
  • Registratie: September 2006
  • Laatst online: 10-01 18:56
Laat maar :)

[ Voor 94% gewijzigd door osorkon! op 08-10-2008 14:26 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Daarom gebruik ik nooit rare constructies als de volgende:
PHP:
1
echo "<h1>$var[$i]</h1>"

Ik vind het persoonlijk lastiger te zien dat er een variabele staat, en bovendien krijg je gauw interpretatiefoutjes als je even niet oplet. Als je het al gebruikt, dan zou ik er zelf voor kiezen om er altijd { } omheen te zetten, zoals ze in die bug report ook al zeggen. :)

Overigens ben ik wel benieuwd naar het antwoord op mijn "offtopic" vragen. Ik ben bang dat je het jezelf veel moeilijker maakt dan nodig is. :)
osorkon! schreef op woensdag 08 oktober 2008 @ 14:24:
PHP:
1
2
3
4
$dag = $row[ 'dag']; 
$week = $row[ 'week']; 
$uur = $row[ 'uur']; 
$array[ $week][ $dag][ $uur][]= $row['wie'];

Waarom zet je altijd een spatie tussen je blokhaakjes? Is dat de error?
Spaties tussen operators maken als PHP niet nóg gekker is geworden niks uit. :P

[ Voor 42% gewijzigd door NMe op 08-10-2008 14:27 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

gizmo9003 schreef op woensdag 08 oktober 2008 @ 14:19:
Edit: probleem gevonden. Een bug met dubbele quotes in een echo, waarbinnen het array niet werkt.
meer informatie: http://bugs.php.net/bug.php?id=15378
Niks bug. Die parser is een machine, die kan niet weten hoe jij iets interpreteert.
PHP:
1
2
3
4
// Doet het niet, logisch
echo "Resultaat: $array[1][2][3]";
// Doet het wel
echo "Resultaat: {$array[1][2][3]}";

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Tiemez
  • Registratie: December 2003
  • Laatst online: 24-10-2022
MueR schreef op woensdag 08 oktober 2008 @ 15:13:
[...]

Niks bug. Die parser is een machine, die kan niet weten hoe jij iets interpreteert.
PHP:
1
2
3
4
// Doet het niet, logisch
echo "Resultaat: $array\[1]\[2]\[3]";
// Doet het wel
echo "Resultaat: {$array\[1]\[2]\[3]}";
PHP:
1
echo "Resultaat: ".$array[1][2][3];

is (vind ik) netter en handiger met debuggen.

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

True, de {$array[1]} is eigenlijk alleen nuttig in heredoc blokken. In een goede IDE is het trouwens duidelijk genoeg te zien, dus dan maakt het weinig verschil.

Anyone who gets in between me and my morning coffee should be insecure.

Pagina: 1