Mysql
 sql >> Base de données >  >> RDS >> Mysql

Menu à plusieurs niveaux à partir des enregistrements de la base de données

Le code pour cela serait quelque chose comme ce qui suit (cela devra être modifié quelle que soit la manière dont vous interagissez avec la base de données, etc.) :

// Here we do a query to get all the rows from the table
$db_result = db_execute_query('SELECT * FROM `menu_table` ORDER BY `order_no`');

// Here we take the rows and put it into a structured array
$items = array();
$hierarchy = array('' => array());
while ($row = db_fetch_row($db_result)) {
    $items[$row['menu_name']] = $row['menu_name_en'];
    if ($row['main_menu'] == 'yes') {
        $hierarchy[''][] = $row['menu_name'];
    } else {
        if (!isset($hierarchy[$row['sub_menu']]) {
            $hierarchy[$row['sub_menu']] = array();
        }
        $hierarchy[$row['sub_menu']][] = $row['menu_name'];
    }
}

// Here we define a recursive function to run through our $hierarchy array;
function show_menu($name = '') {
    if (isset($hierarchy[$name])) {
        if ($name == '') {
                echo '<ul class="dropdown">';
        } else {
                echo '<ul class="sub_menu">';
        }

        foreach ($hierarchy[$name] as $sub) {
            echo '<li><a href="#">' . $items[$sub] . '</a>';
            show_menu($sub);
            echo '</li>';
        }

        echo '</ul>';
    }
}

// Here we execute the recursive function on the main menu
show_menu('');

Essayez de comprendre ce que je fais ici au lieu de simplement le mettre en œuvre textuellement. Une fois que vous maîtrisez les fonctions récursives, un tout nouveau monde peut s'ouvrir à vous.

Notez également que votre table db pourrait être modifiée pour simplifier ce code