Geneste items ophalen

Aan gegevens die in je database staan heb je niks als je ze er niet uit kunt halen. Ik zal hier een manier laten zien om dat slim aan te pakken. Er zijn verschillende mogelijkheden, maar deze vind ik zelf het makkelijkst.

Stap 1: De query
De query is eigenlijk net zoals elke andere SELECT-query.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
// Maak eerst zelf verbinding met de database
mysql_connect('localhost', 'gebruiker', wachtwoord);
mysql_select_db('database');

// Voer de query uit
$query = 'SELECT pagina_id, ouder_id, titel FROM Menu';
$resultaat = mysql_query($query) or die('De query kon niet uitgevoerd worden.');
?>

Dit is verder niks bijzonders. Maar hoe kan je hier nou makkelijk een lijst van maken?

Stap 2: De gegevens in een array plaatsen
De tweede stap is om de gegevens in een multidimensionale array te plaatsen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
// Sla de pagina's op in een array
$paginas = array();

while (list($pagina_id, $ouder_id, $titel) = mysql_fetch_array($resultaat)) {
    // Voeg toe aan de array
    $paginas[$ouder_id][$pagina_id] = $titel;
}

?>

Dit ziet er al iets ingewikkelder uit. Wat we hier doen is een array maken die er als volgt uit komt te zien:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Array
(
    [0] => Array
        (
            [1] => Informatie
            [11] => PHP stuff
            [15] => Forum
            [16] => Contact
        )

    [1] => Array
        (
            [2] => Nieuws
            [3] => FAQ
            [10] => Over PHPhulp
        )

    [3] => Array
        (
            [4] => Wat is PHPhulp?
            [5] => Auteursrechten
            [6] => Hoe voeg ik iets toe?
            [7] => Welke codes kan ik gebruiken?
        )

    [7] => Array
        (
            [8] => Ignore
            [9] => Teksten
        )

    [11] => Array
        (
            [12] => PHP tutorials
            [13] => PHP scripts
            [14] => PHP boeken
        )

)

Zoals je ziet maken we een array met als buitenste key de waarde van ouder_id. De waarde van deze buitenste array is een andere array met daarin alle pagina’s met deze ouder_id.

Stap 3: De items weergeven
Tot slot moeten we deze array nog netjes weergeven aan de gebruiker. Hiervoor maken we gebruik van een recursieve functie.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
function maak_lijst($ouder) {
    // We hebben de paginas array nodig
    global $paginas;
    
    // Start een geordende lijst
    echo '<ol>';
    
    // Maak een lus voor elke onderliggende array
    foreach ($ouder as $pagina_id => $titel) {
        // Weergeef de pagina
        echo '<li>'.$titel;
        
        // Controleer op subtaken
        if (isset($paginas[$pagina_id])) {
            // Roep deze functie weer aan
            maak_lijst($paginas[$pagina_id]);
        }

        
        // Sluit het lijst item
        echo '</li>';
    }

    
    // Sluit de geordende lijst
    echo '</ol>';
}


// Verzend de root-items naar de functie
maak_lijst($paginas[0]);
?>

Als eerste wordt de array met root items naar deze functie verzonden. De geordende lijst wordt gestart en elk item wordt bekeken. Ook wordt er per item bekeken of het kinderen heeft. Als dat het geval is, wordt de array met kinderen naar deze functie verstuurd. Tot slot wordt de geordende lijst weer afgesloten.

Door de array met kinderen weer naar dezelfde functie te sturen, komt er een geordende lijst binnen het lijst-item. Het resultaat staat hieronder.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<ol>
  <li>Informatie
  <ol>
    <li>Nieuws</li>
    <li>FAQ
    <ol>
      <li>Wat is PHPhulp?</li>
      <li>Auteursrechten</li>
      <li>Hoe voeg ik iets toe?</li>
      <li>Welke codes kan ik gebruiken?
      <ol>
        <li>Ignore</li>
        <li>Teksten</li>
      </ol></li>
    </ol></li>
    <li>Over PHPhulp</li>
  </ol></li>
  <li>PHP stuff
  <ol>
    <li>PHP tutorials</li>
    <li>PHP scripts</li>
    <li>PHP boeken</li>
  </ol></li>
  <li>Forum</li>
  <li>Contact</li>
</ol>

En dit is precies wat we wilde hebben. Natuurlijk is dit nog geen menu, maar dit is wel de basis. Als je die eenmaal goed beheerst, kan je het uitbreiden en aanpassen aan je eigen behoeften.

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Inleiding
  2. Wat zijn geneste items?
  3. Geneste items opslaan
  4. Geneste items ophalen
  5. Opslaan in XML
  6. Slotwoord en referenties

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.