I'm trying to build a multi-array menu (but open to using classes or something if that makes this easier). Does anyone have a solution already working? I'm very close, but I can't seem to get my "directories" to work and I end up with extraneous <ul> blocks. here's what I need to re-create: <div class = "portlet nav closed"> <div class="header"><h2>Admin</h2></div> <div class="content"> <ul class="navTree"> <li class="directory collapsed"><a href="" class="toggle">Users</a> <ul class="navTree toggleClosed"> <li class="file ext_txt"><a href="operators">Roles</a></li> <li class="file ext_txt"><a href="operators">Report</a></li> </ul> </li> <li class="directory collapsed"><a href="" class="toggle">Aircraft</a> <ul class="navTree toggleClosed"> <li class="file ext_txt"><a href="operators">Admin</a></li> <li class="file ext_txt"><a href="operators">Search</a></li> <li class="file ext_txt"><a href="operators">Audit</a></li> </ul> </li> <li class="directory collapsed"><a href="" class="toggle">Data</a> <ul class="navTree toggleClosed"> <li class="file ext_txt"><a href="operators">Airline/Aircraft</a></li> <li class="directory collapsed"><a href="" class="toggle">Fault Logs</a> <ul class="navTree toggleClosed"> <li class="file ext_txt"><a href="operators">Daily</a></li> <li class="file ext_txt"><a href="operators">One Day</a></li> </ul> </li> <li class="file ext_txt"><a href="operators">Duplicate Fault Log</a></li> </ul> </li> <li class="file ext_txt"><a href="operators">News</a></li> </ul> </div> </div> Here's my array (basically): $navArray['admin'] = array ('alt' => 'Administration', 'title' => 'Administration', 'description' => 'Administration Tools and Links', 'headline' => true, 'users' => array ('alt' => 'Users', 'title' => 'Users', 'description' => 'Users', 'panasonic_only' => true), 'aircraft' => array ('alt' => 'Aircraft', 'title' => 'Aircraft', 'description' => 'Aircraft', 'panasonic_only' => true), 'logs' => array ('alt' => 'Fault Logs', 'title' => 'Fault Logs', 'description' => 'Fault Logs', 'panasonic_only' => true), 'airline' => array ('alt' => 'Airline/Aircraft', 'title' => 'Airline/Aircraft', 'description' => 'Airline/Aircraft', 'page' => 'XXXXX.php', 'panasonic_only' => true), 'news' => array ('alt' => 'News', 'title' => 'News', 'description' => 'News', 'page' => 'XXXXX.php', 'panasonic_only' => true) ); $navArray['admin']['users']['roles'] = array ('alt' => 'Roles', 'title' => 'Roles', 'description' => 'Roles', 'page' => 'XXXXX.php', 'panasonic_only' => true); $navArray['admin']['users']['report'] = array ('alt' => 'Report', 'title' => 'Report', 'description' => 'Report', 'page' => 'XXXXX.php', 'panasonic_only' => true); $navArray['admin']['aircraft']['admin'] = array ('alt' => 'Admin', 'title' => 'Admin', 'description' => 'Admin', 'page' => 'XXXXX.php', 'panasonic_only' => true); $navArray['admin']['aircraft']['search'] = array ('alt' => 'Search', 'title' => 'Search', 'description' => 'Search', 'page' => 'XXXXX.php', 'panasonic_only' => true); $navArray['admin']['aircraft']['audit'] = array ('alt' => 'Audit', 'title' => 'Audit', 'description' => 'Audit', 'page' => 'XXXXX.php', 'panasonic_only' => true); $navArray['admin']['logs']['daily'] = array ('alt' => 'Daily', 'title' => 'Daily', 'description' => 'Daily', 'page' => 'XXXXX.php', 'panasonic_only' => true); $navArray['admin']['logs']['day'] = array ('alt' => 'One Day', 'title' => 'One Day', 'description' => 'One Day', 'page' => 'XXXXX.php', 'panasonic_only' => true); $navArray['admin']['logs']['dupes'] = array ('alt' => 'Duplicate Faults', 'title' => 'Duplicate Faults', 'description' => 'Duplicate Faults', 'page' => 'XXXXX.php', 'panasonic_only' => true); And here's my recursive function: function multiArray2MenuTree( $menu, $indent = 0, $sub = false ) { if (!is_array($menu)) return false; echo str_repeat("\t",$indent)." <ul class=\"navTree toggleClosed \">\n"; foreach ($menu as $key => $value) { //echo "<b>$key</b> = $value<br/>\n"; if (is_array($value)) { echo str_repeat("\t",$indent+1).'<li id="'.$key.'" class="file ext_txt"><a href="'.$value['page'].'">'.$value['alt']."</a>\n"; echo multiArray2MenuTree($value, $indent+1, true); echo str_repeat("\t",$indent+1)."</li>\n"; } elseif ($key == 'alt' && !$sub) echo str_repeat("\t",$indent+1).'<li id="'.$key.'" class="directory collapsed"><a href="#" class="toggle">'.$value['alt']."</a></li>\n"; } echo str_repeat("\t",$indent)." </ul>\n"; } multiArray2MenuTree($navArray); and the output of that: <li id="admin" class="file ext_txt"><a href="">Administration</a> <ul class="navTree toggleClosed"> <li id="users" class="file ext_txt"><a href="">Users</a> <ul class="navTree toggleClosed"> <li id="roles" class="file ext_txt"><a href="XXXXX.php">Roles</a> <ul class="navTree toggleClosed"> </ul> </li> <li id="report" class="file ext_txt"><a href="XXXXX.php">Report</a> <ul class="navTree toggleClosed"> </ul> </li> </ul> </li> <li id="aircraft" class="file ext_txt"><a href="">Aircraft</a> <ul class="navTree toggleClosed"> <li id="admin" class="file ext_txt"><a href="XXXXX.php">Admin</a> <ul class="navTree toggleClosed"> </ul> </li> <li id="search" class="file ext_txt"><a href="XXXXX.php">Search</a> <ul class="navTree toggleClosed"> </ul> </li> <li id="audit" class="file ext_txt"><a href="XXXXX.php">Audit</a> <ul class="navTree toggleClosed"> </ul> </li> </ul> </li> <li id="logs" class="file ext_txt"><a href="">Fault Logs</a> <ul class="navTree toggleClosed"> <li id="daily" class="file ext_txt"><a href="XXXXX.php">Daily</a> <ul class="navTree toggleClosed"> </ul> </li> <li id="day" class="file ext_txt"><a href="XXXXX.php">One Day</a> <ul class="navTree toggleClosed"> </ul> </li> <li id="dupes" class="file ext_txt"><a href="XXXXX.php">Duplicate Faults</a> <ul class="navTree toggleClosed"> </ul> </li> </ul> </li> <li id="airline" class="file ext_txt"><a href="XXXXX.php">Airline/Aircraft</a> <ul class="navTree toggleClosed"> </ul> </li> <li id="news" class="file ext_txt"><a href="XXXXX.php">News</a> <ul class="navTree toggleClosed"> </ul> </li> </ul> </li>