Starx Starx - 1 year ago 165
PHP Question

How to build unlimited level of menu through PHP and mysql

Well, to build my menu my menu I use a db similar structure like this

2 Services 0
3 Photo Gallery 0
4 Home 0
5 Feedback 0
6 FAQs 0
7 News & Events 0
8 Testimonials 0
81 FACN 0
83 Organisation Structure 81
84 Constitution 81
85 Council 81
87 Services 81
88 Publications 81

To assign another submenu for existing submenu I simply assign its parent's id as its value of parent field.
parent 0 means top menu

now there is not problem while creating submenu inside another submenu

now this is way I fetch the submenu for the top menu

<ul class="topmenu">
<? $list = $obj -> childmenu($parentid);
//this list contains the array of submenu under $parendid
foreach($list as $menu) {
echo '<li><a href="#">'.$name.'</a></li>';

What I want to do is.

I want to check if a new menu has other child menu

and I want to keep on checking until it searches every child menu that is available

and I want to display its child menu inside its particular list item like this

<li><a href="#">Home</a>
<ul class="submenu">
........ <!-- Its sub menu -->

Answer Source

You need to use recursive functions for this. Technically, there's a few ways to do it, but recursion is really the best option here.

Here's the basic gist of how it would work:

function drawMenu ($listOfItems) {
    echo "<ul>";
    foreach ($listOfItems as $item) {
        echo "<li>" . $item->name;
        if ($item->hasChildren()) {
            drawMenu($item->getChildren()); // here is the recursion
        echo "</li>";
    echo "</ul>";

The properties and methods of $item are just examples, and I'll leave it up to you to implement these however you need to, but I think it gets the message across.