2016-04-20 7 views
0

Ich lerne über Rekursion, und hier ist das Menü Array, ich habe viel suchen und nicht die Lösung mit dieser Menüstruktur gefunden.rekursives Menü mit dieser Datenstruktur

Jeder kann mit diesen helfen.

$menu = array(
    'level' => array(
     0 => 1 
     1 => 1 
     2 => 2 
     3 => 3 
     4 => 1 
     5 => 2 
     6 => 2 
     7 => 3 
     8 => 2 
    ), 
    'title' => array(
     0 => title 1 
     1 => title 2 
     2 => title 3 
     3 => title 4 
     4 => title 5 
     5 => title 6 
     6 => title 7 
     7 => title 8 
     8 => title 9 
    ) 
) 

wie folgende HTML-Struktur mit Rekursion zu produzieren?

<ul> 
    <li>title 1</li> 
    <li>title 2 
     <ul> 
      <li>title 3 
       <ul> 
        <li>title 4</li> 
       </ul> 
      </li> 
     </ul> 
    </li> 
    <li>title 5 
     <ul> 
      <li>title 6</li> 
      <li>title 7 
       <ul> 
        <li>title 8</li> 
       </ul> 
      </li> 
      <li>title 9</li> 
     </ul> 
    </li> 
</ul> 
+0

Was ist das Niveau für? –

+0

Ich sehe nicht, wie die html-Struktur eine Beziehung mit dem Array hat, das Sie bereitgestellt haben. Wie können wir sagen, dass ein Artikel Unterpositionen hat? –

+0

Ok ich verstehe jetzt, wo die Struktur herkommt. –

Antwort

-1

ich habe die Struktur und Ebenen zusammengeführt. Eine rekursive Funktion erzeugt die Ausgabe. Ich denke, dass dieser Code leicht verständlich ist - keine Notwendigkeit für Kommentare. die Struktur nehmen Sie einfach das erste Element eines Arrays als Titel und erhöhen Sie die Ebene.

<?php 
$menu = [ 
    'title 1', 
    [ 
     'title 2', 
     [ 
      ['title 3', 
      'title 4'] 
     ] 
    ], 
    [ 
     'title 5', 
      'title 6', 
      ['title 7', 
      'title 8'], 
      'title 9' 
    ] 
]; 

function createMenu($menu,$entry = false,$level = 1) { 
    foreach ($menu as $title) { 
     if (is_array($title)) { 
       createMenu($title,true,$level); 
       if (count($title)>1) { 
       echo str_repeat("\t",$level*2-1)."\t</ul>\n"; 
       echo str_repeat("\t",$level*2-1)."</li>\n"; 
       } 
     } else { 
      echo str_repeat("\t",$level*2-1)."<li>$title"; 
      if ($entry) { 
       echo "\n".str_repeat("\t",$level*2-1)."\t<ul>\n"; 
       $level++; 
       $entry = false; 
      } else { 
       echo "</li>\n"; 
      } 
     } 
    } 
} 
echo "<ul>\n"; 
createMenu($menu); 
echo "</ul>"; 

Lösung 2 stecken auch auf Ihre Frage, wenn ich es nicht empfehlen:

<?php 
$menu = array(
    'level' => [1,1,2,3,1,2,2,3,2], 
    'title' => ["title 1","title 2","title 3","title 4","title 5","title 6","title 7","title 8","title 9"] 
); 
echo "<ul>\n"; 
//cycle levels 
$lastLevel = 1; 
foreach ($menu['level'] as $key => $level) { 
    if ($key == 0) {} 
    elseif ($level > $lastLevel) echo "\n".str_repeat("\t",$lastLevel*2)."<ul>\n"; 
    elseif ($level < $lastLevel) { 
     echo "</li>\n"; 
     for (;$level<$lastLevel;$lastLevel--) { 
      echo str_repeat("\t",($lastLevel-1)*2)."</ul>\n"; 
      echo str_repeat("\t",($lastLevel-1)*2-1)."</li>\n"; 
     } 
    } else echo "</li>\n"; 
    echo str_repeat("\t",$level*2-1).'<li>'.$menu['title'][$key]; 
    $lastLevel = $level; 
} 
echo "</li>\n"; 
//finish tags 
for (;1 < $lastLevel;$lastLevel--) { 
    echo str_repeat("\t",($lastLevel-1)*2)."</ul>\n"; 
    echo str_repeat("\t",($lastLevel-1)*2-1)."</li>\n"; 
} 
echo '</ul>'; 
+0

Das beantwortet die Frage nicht. –

+0

@ di3 helli di3, danke für deine Antwort, aber ich kann nicht verstehen, wie das Array zu deinem fusionierten Array wird, kannst du mehr Details geben? oder basiert auf meinem Array, um es zu codieren? Vielen Dank – David69

+0

Ich benutze die Struktur des Arrays für die Ebenen. Ebene eins ist die erste Array-Dimension, die folgende Dimension ist eine andere Ebene. Der erste Eintrag des Arrays ist der Titel einer neuen Dimension. Sie sind flexibler mit diesem – di3