Avatar billede dulius Nybegynder
01. februar 2005 - 12:16 Der er 1 kommentar og
1 løsning

Recursive arrays

hey..

Har kæmpet med et stykke PHP en del timer efterhånden, men kan simpelthen ikke få det til at virke - kan slet ikke regne ud hvordan det skal fikses.

Sagen er den at jeg har et array med menu-punkter.. hvert menu-punkt kan så indeholde sine egne menu-punkter (undermenuer) osv... så man sådan set kan blive ved med at komme et niveau længere ind..

Et eks: på hvordan menuen kunne se ud:

<?php
$menu=array("Hovedmenu1"=>array("Undermenu1","Undermenu2"=>array("Undermenu3","Undermenu4")));
?>

så Hovedmenu1 indeholder Undermenu1 og Undermenu2, som indeholder Undermenu3 og Undermenu4 ... osv..

Det jeg gerne vil lave er et script til at få læst dette igennem.. Hvis der var et konstant eller et max antal undermenuer ville det jo være nemt nok, men at lave et script som selv finder ud af hvor mange niveauer undermenuerne går ind?

Håber I forstår mit spørgsmål, ellers må I jo spørge :-)
Lidt hjælp ville være super - min hjerne er ikke selv i stand til at knække den! :)

mvh. Julius
--
Avatar billede coderdk Praktikant
01. februar 2005 - 12:39 #1
Du kan måske få noget ud af dette:

function travMenu( $ar, $level = 0 )
{
  foreach ( $ar as $key => $val )
  {
      if ( is_array( $val ) )
      {
          echo str_repeat( "+-", $level ) . "$key<br>";
          travMenu( $val, $level + 1 );
      }
      else
      {
          echo str_repeat( "--", $level ) . "$val<br>";
      }
  }
}

$menu=array("Hovedmenu1"=>array("Undermenu1","Undermenu2"=>array("Undermenu3","Undermenu4")));

travMenu( $menu );
Avatar billede loevgaard Praktikant
01. februar 2005 - 12:57 #2
Jeg har også lavet en, hvis det er :)

function indent($num) {
    for($i=0;$i<$num;$i++) {
        echo "&nbsp;&nbsp;&nbsp;";   
    }   
}
function printmenu($arr, $indent = 0) {
    foreach($arr as $key => $cap) {
        if(is_array($cap)) {
            indent($indent);
            echo $key."<br>";
            printmenu($cap, ($indent+1));   
        } else {
            indent($indent);
            echo $cap."<br>";   
        }
    }   
}
$menu = array("Hovedmenu1"=>array("Undermenu1","Undermenu2"=>array("Undermenu3","Undermenu4")));
printmenu($menu);
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester