tags:

views:

159

answers:

2

I have the following array.

    Array
(
    [24] => Array
        (
            [id] => 24
            [name] => Main menu
            [shortdesc] => mainmenu
            [status] => active
            [parentid] => 0
            [order] => 0
            [children] => Array
                (
                    [65] => Array
                        (
                            [id] => 65
                            [name] => Main 4
                            [shortdesc] => 
                            [status] => active
                            [parentid] => 24
                            [order] => 0
                            [children] => Array
                                (
                                )

                        )

                    [64] => Array
                        (
                            [id] => 64
                            [name] => Main 3
                            [shortdesc] => 
                            [status] => active
                            [parentid] => 24
                            [order] => 0
                            [children] => Array
                                (
                                )

                        )

                   ...
                   ...

                    [59] => Array
                        (
                            [id] => 59
                            [name] => Main 1
                            [shortdesc] => 
                            [status] => active
                            [parentid] => 24
                            [order] => 0
                            [children] => Array
                                (
                                    [66] => Array
                                        (
                                            [id] => 66
                                            [name] => Main 1-1
                                            [shortdesc] => 
                                            [status] => active
                                            [parentid] => 59
                                            [order] => 0
                                            [children] => Array
                                                (
                                                )

                                        )

                                )

                        )

                )

        )

    [25] => Array
        (
            [id] => 25
            [name] => Galleri 1
            [shortdesc] => galleri1
            [status] => active
            [parentid] => 0
            [order] => 0
            [children] => Array
                (
                )

        )

)

And I want to convert this to the following HTML by php.

<ul>
   <li>Main menu
        <ul>
            <li>Main 4</li>
            <li>Main 3</li>
            ...
            <li>Main 1
                <ul>
                    <li>Main 1-1</li>
                </ul>
            </li>
        </ul>
   </li>
   <li>Galleri 1</li>

</ul>

I started like this, but I am stuck.

if (count($navlist)){
  echo "\n<ul>";
  foreach ($navlist as $key => $list){
...
...

Any help will be appreciated it.

Thanks in advance.

+2  A: 

Something like this?:

function recursion($multi_dimensional_array)
    {
     $m = $multi_dimensional_array;

     $keys = array();
     foreach($m as $key=>$value)
     {
      $keys[] = $key;
     }

     $i = 0;
     while($i < count($multi_dimensional_array))
     {
      echo '<li><a href="#">'.$keys[$i].'</a>';
      if(is_array($multi_dimensional_array[$keys[$i]]))
      {
       echo '<ul>';
       recursion($multi_dimensional_array[$keys[$i]]);
       echo '</ul>';
      }
      echo '</li>';
      $i++;
     }
    }
AJ
FYI, if you want to get a list of the keys, you can just use array_keys() on the array, like:$keys = array_keys($multi_dimensional_array);
Chris
Chris, I loved your solution. Its really terse and to the point. Thanks for pointing out the function.
AJ
It's no problem, I'm always here to help people out. Thanks for the kind words!
Chris
+1  A: 
function arrayToUL(array $array)
{
    echo '<ul>';
    foreach ($array as $key => $value)
    {
     if (isset($value['name'])) echo "<li>{$value['name']}</li>";
     if (!empty($value['children']) && is_array($value['children']))
     {
      echo arrayToUL($value['children']);
     }
    }
    echo '</ul>';
}
Chris