Daevid Vincent wrote:
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:
Try this function instead.
function multiArray2MenuTree( $menu, $indent = 0, $sub = false ) {
if ( is_array($menu) && count($menu) ) {
print(str_repeat("\t",$indent).'<ul class="navTree toggleClosed">');
foreach ($menu as $key => $value) {
//echo "<b>$key</b> = $value<br/>\n";
if ( is_array($value) ) {
print(str_repeat("\t",$indent+1).
'<li id="'.$key.'" class="file ext_txt"><a href="'.
$value['page'].'">'.$value['alt'].'</a>');
multiArray2MenuTree($value, $indent+1, true);
print(str_repeat("\t",$indent+1).'</li>');
} elseif ($key == 'alt' && !$sub) {
print(str_repeat("\t",$indent+1).'<li id="'.$key.
'" class="directory collapsed"><a href="#"
class="toggle">'.$value['alt'].'</a></li>');
} else {
print(str_repeat("\t",$indent+1).'<li id="'.$key.
'" class="directory collapsed">I did not match either if
condition, you need to figure out why...</li>');
}
}
print(str_repeat("\t",$indent).'</ul>');
}
}
This might point out what is happening.
Now, to fix it. Use this...
function multiArray2MenuTree( $menu, $indent = 0, $sub = false ) {
$output = '';
if ( is_array($menu) && count($menu) ) {
foreach ($menu as $key => $value) {
if ( is_array($value) ) {
$output .= str_repeat("\t",$indent).'<li id="'.$key.
'" class="file ext_txt"><a href="'.
$value['page'].'">'.$value['alt']."</a>";
$output .= multiArray2MenuTree($value, $indent+1, true);
$output .= "</li>\n";
} elseif ($key == 'alt' && !$sub) {
$output .= str_repeat("\t",$indent).'<li id="'.$key.
'" class="directory collapsed"><a href="#"
class="toggle">'.$value['alt']."</a></li>\n";
}
}
if ( strlen($output) > 0 ) {
$output = PHP_EOL.str_repeat("\t",$indent).
'<ul class="navTree toggleClosed">'.
PHP_EOL.$output.PHP_EOL.
str_repeat("\t",$indent).'</ul>';
}
}
return $output;
}
echo multiArray2MenuTree($navArray);
Try the above and let us know how it worked.
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php