0

I am trying to genreate Parent -child and their child and so on I have an Array which having sub items means child items.

$navarray= Array
(
    [0] => Array
        (
            [id] => 3
            [name] => add
            [controller] => ClassYearsSubjectsController
            [action] => getsubjects
            [parent] => 0
            [sub] => Array
                (
                )

        )

    [1] => Array
        (
            [id] => 1
            [name] => occupations
            [controller] => OccupationsController
            [action] => index
            [parent] => 0
            [sub] => Array
                (
                    [0] => Array
                        (
                            [id] => 7
                            [name] => test
                            [controller] => AddressesController
                            [action] => index
                            [parent] => 1
                            [sub] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 8
                                            [name] => testnew
                                            [controller] => AdmissionEnquiriesController
                                            [action] => giveadmissions
                                            [parent] => 7
                                            [sub] => Array
                                                (
                                                )

                                        )

                                )

                        )

                    [1] => Array
                        (
                            [id] => 2
                            [name] => add
                            [controller] => OccupationsController
                            [action] => add
                            [parent] => 1
                            [sub] => Array
                                (
                                )

                        )

                )

        )

)

I am trying ot generate tree. But i tried

<?php echo GenerateNavHTML($navarray);  ?>

and function GenerateNavHTML

<?php 

function GenerateNavHTML($nav)
{ 

    $html = '';
    foreach($nav as $page)
    {
        $html.='<ul><li>';    

        $html .= '<a href="#">k</a>';
        $html .= GenerateNavHTML($page['sub']);
        $html .= '</li></ul>';
    }
    return $html;
}

   ?>

And my output is

<ul style="display: block;" class="nav">
    <li class="test"><a href="">add</a>
    </li>
</ul><ul style="display: block;" class="nav"><li class="test"><a href="">occupations</a><ul style="display: block;" class="nav"><li class="test"><a href="">test</a><ul style="display: block;" class="nav"><li class="test"><a href="">testnew</a></li></ul></li></ul><ul style="display: block;" class="nav"><li class="test"><a href="">add</a></li></ul></li></ul>

but i am expecting this output.

<ul style="display: block;" class="nav">
    <li class="test">
    <li class="test">
        <a class="parent" href="#">Shoes</a>
        <ul>
            <li>
                <a class="parent" href="#">Womens</a>
                <ul>
                    <li><a href="#">Sandals</a></li>
                    <li><a href="#">Sneakers</a></li>
                    <li><a href="#">Wedges</a></li>
                    <li><a href="#">Heels</a></li>
                    <li><a href="#">Loafers</a></li>
                    <li><a href="#" class="last" >Flats</a></li>
                </ul>
            </li>
            <li>
                <a class="parent last"  href="#">Mens</a>
                <ul>
                    <li><a href="#">Loafers</a></li>
                    <li><a href="#">Sneakers</a></li>
                    <li><a href="#">Formal</a></li>
                </ul>
            </li>
        </ul>
    </li>
    </ul>
Can anybody tell what logic i need to change
Thanks
Yogesh Suthar
  • 30,424
  • 18
  • 72
  • 100
Rashmi
  • 551
  • 2
  • 4
  • 17

3 Answers3

1

Try this

<?php 

function GenerateNavHTML($nav)
{ 
    if(!empty($nav)) {

          if(isset($nav[0]['parent'])) {
                 $parentid=$nav[0]['parent'];
          }else{
              $parentid=1;
          }
         if($parentid==0) {
             $html = '<ul style="display: block;" class="nav">';
         }else {
             $html='<ul>';
         }
           foreach($nav as $page) {
                $html.='<li>';    
                $html .= '<a href="#">k</a>';
                $html .= GenerateNavHTML($page['sub']);
                $html .= '</li>';
            }
            $html.='</ul>';
            return $html;
     }
}

   ?>
Hitu Bansal
  • 2,917
  • 10
  • 52
  • 87
0

try to do this:

<?php 

function GenerateNavHTML($nav)
{ 
    $html = '<ul>';
    foreach ($nav as $page) {
        $html.='<li>';
        $html .= '<a href="#">k</a>';
        $html .= GenerateNavHTML($page['sub']);
        $html .= '</li>';
    }

    $html .= '</ul>';
    return $html;
}
GoT
  • 156
  • 4
0

Can you try this method :

function GenerateNavHTML($nav)
{
    if (empty ($nav))
        return;

    $html = '';
    $html.='<ul>';

        foreach($nav as $page)
        {
            $html.='<li>';
                $html .= '<a href="#">'.$page["name"].'</a>';
                $html .= GenerateNavHTML($page['sub']);
            $html .= '</li>';
        }

    $html.='</ul>';

    return $html;
}

Get the ul tag out of the for each loop.

Sabari
  • 6,205
  • 1
  • 27
  • 36