[PHP] MySQL result omzetten naar array

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik heb een tabel 'nodes' (met daarin de structuur voor een navigatie menu). Aan het begin van mijn applicatie lees ik deze tabel in zijn geheel uit. Het resultaat zet ik in een array:
PHP:
1
2
3
4
5
6
7
8
9
10
11
$result = db_query("SELECT * FROM nodes ORDER BY pid, weight ASC");

while ($node = db_fetch_array($result))
{
  $_nodes[$node['nid']] = Array('pid' => $node['pid'],
                                'title' => $node['title'],
                                'path' => $node['path'],
                                'level' => $node['level']
                                // etc...
                              );
}

In werkelijkheid heeft de tabel meer dan 4 kolommen, maar dat doet er niet toe. Het gaat om het principe. Het lijkt me dat ik die array veel makkelijker, met een loop ofzo, kan vullen, in plaats van voor elk array element een 'pid' => $node['pid']-achtig deel aan deze code toe te voegen:
PHP:
1
2
3
4
5
6
7
8
9
while ($node = db_fetch_array($result))
{
  $output = Array(;

  foreach ($node as $key => $value)
    $output.= $key => $node[$value].','

  $output.= );
}

Dat werkt natuurlijk niet, maar geeft wel aan wat ik bedoel. Kan iemand mij op weg helpen met een loop die door de $node array die terugkomt van de MySQL database loopt, en de array automatisch opbouwt? Of is daar misschien een aparte PHP functie voor die ik niet ken?

[ Voor 20% gewijzigd door Reveller op 01-03-2005 22:51 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

PHP:
1
2
3
4
5
6
7
8
while ($node = db_fetch_array($result))
{
  foreach ($node as $key => $value) {
    if ($key != 'nid') {
      $_nodes[$node['nid']][$key] = $value;
    }
  }
}

Zoiets?

[ Voor 10% gewijzigd door NMe op 01-03-2005 22:56 ]

'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!

  • Artyfarty
  • Registratie: Februari 2005
  • Laatst online: 09-05-2022

Artyfarty

...en waarom dan wel?

Maar het resultat van die fetch_array is al een associatieve array! Dus je hoeft helemaal niet nog zo'n loopje te draaien.

Standaard:
code:
1
2
3
4
5
6
7
<?php
$output = aray();
while ($node = db_fetch_array($result))
{
  $output[] = $node; 
}
?>


en nu heb je een leuke array met vb. $output[0]["naam"] is de naam van de eerste in je resultatenset...

(of snap ik je probleem niet??)

[ Voor 4% gewijzigd door Artyfarty op 01-03-2005 22:59 ]

"If everything seems under control, you're just not going fast enough." (Mario Andretti)


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Artyfarty schreef op dinsdag 01 maart 2005 @ 22:57:
Maar het resultat van die fetch_array is al een associatieve array! Dus je hoeft helemaal niet nog zo'n loopje te draaien.

Standaard:
code:
1
2
3
4
5
6
7
<?php
$output = aray();
while ($node = db_fetch_array($result))
{
  $output[] = $node; 
}
?>


en nu heb je een leuke array met vb. $output[0]["naam"] is de naam van de eerste in je resultatenset...

(of snap ik je probleem niet??)
Hij wil controle hebben over de gebruikte index (nid), tenminste, dat maak ik eruit op. Nou je het zegt, het kan veel korter:
PHP:
1
2
3
4
while ($node = db_fetch_array($result))
{
  $_nodes[$node['nid']] = $node;
}

'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!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
-NMe- schreef op dinsdag 01 maart 2005 @ 23:02:
[...]Hij wil controle hebben over de gebruikte index (nid), tenminste, dat maak ik eruit op. Nou je het zegt, het kan veel korter: [...]
Ik wil inderdaad de nid als index hebben. Jouw eerste oplossing is idd wat ik bedoel. Ik kwam er vannacht op, maar had nog geen tijd mijn post met die oplossing af te sluiten. Jouw oplossing van hierboven is helemaal kort, maar (uit mijn hoofd...) wordt de nid nu niet als index en als property (heet dat zo bij een array?) toegevoegd? Dat ga ik vanavond even testen. Niet dat dat heel erg zou zijn, maar voor de netheid gebruik ik anders je eerste oplossing :)

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Reveller schreef op woensdag 02 maart 2005 @ 09:50:
Ik wil inderdaad de nid als index hebben. Jouw eerste oplossing is idd wat ik bedoel. Ik kwam er vannacht op, maar had nog geen tijd mijn post met die oplossing af te sluiten. Jouw oplossing van hierboven is helemaal kort, maar (uit mijn hoofd...) wordt de nid nu niet als index en als property (heet dat zo bij een array?) toegevoegd?
Jawel, maar dat lijkt me niet zo'n probleem, toch? Het heet iig over het algemeen respectievelijk key (of index) en value binnen een array, waarbij de key hier dan een integer (nid) is, en de value een ander, associatief array is.
Dat ga ik vanavond even testen. Niet dat dat heel erg zou zijn, maar voor de netheid gebruik ik anders je eerste oplossing :)
Voor de netheid kun je juist beter die tweede oplossing gebruiken. Die is sneller, en korter in code. En het lijkt me absoluut niet storend dat dat nid er twee keer in staat. :)

'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.

Pagina: 1