2012-12-12 43 views
0

我有一個數組($嵌套)這樣的(這是的print_r()輸出)在「嵌套類」功能限制嵌套的UL

Array 
(
    [1] => Array 
     (
      [id] => 1 
      [module] => 1 
      [parent] => 0 
      [name] => Audio 
     ) 

    [20] => Array 
     (
      [id] => 20 
      [module] => 1 
      [parent] => 5 
      [name] => Mixer analogici 
     ) 

    [16] => Array 
     (
      [id] => 16 
      [module] => 1 
      [parent] => 4 
      [name] => Videoproiettori 
     ) 

    [11] => Array 
     (
      [id] => 11 
      [module] => 1 
      [parent] => 2 
      [name] => Strutture 
     ) 

    ... 

    [19] => Array 
     (
      [id] => 19 
      [module] => 1 
      [parent] => 5 
      [name] => Mixer digitali 
     ) 

) 

和一個遞歸函數來創建一個嵌套菜單:

function nmenu($module, $parent, $array) { 
    $has_children = false; 
    foreach($array as $key => $value) { 
     if ($value['module'] == $module) { 
      if ($value['parent'] == $parent) {  
       if ($has_children === false && $parent) { 
        $has_children = true; 
        echo "<ul>\n"; 
       } 
       echo '<li>'; 
       echo '' . $value['name'] . " \n"; 
        nmenu($module, $key, $array); 
       echo "</li>\n"; 
      } 
     } 
    } 
    if ($has_children === true && $parent) echo "</ul>\n"; 
} 

,我稱之爲是這樣的:

<ul> 
    <?php nmenu($row_rsNavModules['mod_id'], 0, $nested) ?> 
</ul> 

一切都很好,遞歸函數按預期工作,並創建了一個意甲無限嵌套的UL第...嗯,這是「無限」,它是太多了:我想限制縮進級別(又名縮進UI的數量)爲2,這樣的:

Cat 1 
    Subcat 1-1 
    Subcat 1-2 
    ... 
Cat 2 
    Subcat 2-1 
    Subcat 2-2 
    ... 

而不是像這樣結束:

Cat 1 
    Subcat 1-1 
      Sub-Subcat 1-1-1 
        Sub-Sub-Subcat 1-1-1-1 
        ... 

請問,我該如何編輯以前的功能來實現這一目標? 在此先感謝!

回答

1

一旦計數器達到您的限制,您只需要有一個計數器並退出該功能。喜歡的東西:

//counter parameter added 
function nmenu($module, $parent, $array, $counter) { 
    $has_children = false; 
    foreach($array as $key => $value) { 
     if ($value['module'] == $module) { 
      if ($value['parent'] == $parent) {  
       if ($has_children === false && $parent) { 
        $has_children = true; 
        echo "<ul>\n"; 
       } 
       echo '<li>'; 
       echo '' . $value['name'] . " \n"; 

       if($counter<2){ //added 
        //counter parameter added 
        nmenu($module, $key, $array, $counter+1); 
       } //added 
       echo "</li>\n"; 
      } 
     } 
    } 
    if ($has_children === true && $parent) echo "</ul>\n"; 
} 

,並調用它是這樣的:

<ul> 
    <?php 
     //counter parameter added 
     nmenu($row_rsNavModules['mod_id'], 0, $nested, 1) 
    ?> 
</ul> 
+0

謝謝,它工作得很好! – Ivan