2017-05-04 194 views
1

對於我的動態導航,我需要一些幫助,因爲我還是PHP新手。 使用這些函數,該文件將數組的值傳遞給json和js文件。 正確的索引對函數特別重要。在PHP中創建動態導航菜單(索引)

$_js_remc->remote_copy($renaming_js_file, $renaming_js_file_to); 
    $_json_remc->remote_copy($renaming_jsonfile, $renaming_jsonfile_to); 

    if ($_js_remc->remote_is_writeable($renaming_js_file) && $_json_remc->remote_is_writeable($renaming_jsonfile)) { 
     $i = 10000; 
     $menu_string = "document.getElementById('categories_menu').innerHTML='"; 
     for ($z = 0; $z < count($_POST['menu_lvl1_text']); $z++) { 

      $i = $i + 100; 
      $menu_string .= '<li><a href="' . $_POST['menu_lvl1_link'][$z] . '">' . htmlentities($_POST['menu_lvl1_text'][$z], ENT_QUOTES, "UTF-8") . '</a>'; 
      $linkname_lvl1 = ($_POST['menu_lvl1_text'][$z]); 
      $url_lvl1 = ($_POST['menu_lvl1_link'][$z]); 
      $menu_list[$i] = array($linkname_lvl1 => $url_lvl1); 

      if (isset($_POST['menu' . $z . '_lvl2_text']) && !empty($_POST['menu' . $z . '_lvl2_text'])) { 
        $i = $i +1; 
        $menu_string .= '<ul>'; 
        for ($zs = 0; $zs < count($_POST['menu' . $z . '_lvl2_text']); $zs++) { 
        $menu_string .= '<li><a href="' . $_POST['menu' . $z . '_lvl2_link'][$zs] . '">' . htmlentities($_POST['menu' . $z . '_lvl2_text'][$zs], ENT_QUOTES, "UTF-8") . '</a>';  
        $linkname_lvl2 = ($_POST['menu' . $z . '_lvl2_text'][$zs]); 
        $url_lvl2 = ($_POST['menu' . $z . '_lvl2_link'][$zs]); 
        $menu_list[$i] = array($linkname_lvl2 => $url_lvl2); 
        $i = $i + 1;       
        } 
        $menu_string .= '</ul>'; 

      } 
      $menu_string .= '</li>'; 
     }  
     $menu_string .= "';"; 

從代碼中可以看出,json文件在邏輯上記錄下列值。

{ 
    "10100": { 
     "Lvl_1_1": "Level_1_1" 
    }, 
    "10101": { 
     "Lvl1_2": "Lvl1_2" 
    }, 
    "10102": { 
     "Lvl1_3": "Lvl1_3" 
    }, 
    "10203": { 
     "Lvl_2_1": "Lvl_2_1" 
    }, 
    "10204": { 
     "Lvl2_2": "Lvl2_2" 
    } 
} 

問題: 的綜(對前「10102」),當然是,將要增加,但只在它的類別,在此之後爲下一個類別殼簡歷的索引,例如,「 10200" 。每個類別具有不同數量的子鏈接。

的輸出如下:

<li id="u_1_0"> 
      <a href="#"><span id="i_1_0"></span></a> 
      <ul class="sub"> 
      <li id="u_1_2"><a href="#"><span id="i_1_2"></span></a></li> 
      <li id="u_1_3"><a href="#"><span id="i_1_3"></span></a></li> 

是否有人知道的建議?

+0

請詳細解釋你的輸入數組是什麼,導航輸出是什麼。 – Jeet

+0

$ menu_list用於輸入, –

回答

0

如果您重置計數器$i只有奮鬥,你可以只將計數器復位內for循環後:

if ($_js_remc->remote_is_writeable($renaming_js_file) && $_json_remc->remote_is_writeable($renaming_jsonfile)) { 
     $i = 10000; 
     $menu_string = "document.getElementById('categories_menu').innerHTML='"; 
     for ($z = 0; $z < count($_POST['menu_lvl1_text']); $z++) { 

      $i = $i + 100; 
      $menu_string .= '<li><a href="' . $_POST['menu_lvl1_link'][$z] . '">' . htmlentities($_POST['menu_lvl1_text'][$z], ENT_QUOTES, "UTF-8") . '</a>'; 
      $linkname_lvl1 = ($_POST['menu_lvl1_text'][$z]); 
      $url_lvl1 = ($_POST['menu_lvl1_link'][$z]); 
      $menu_list[$i] = array($linkname_lvl1 => $url_lvl1); 

      if (isset($_POST['menu' . $z . '_lvl2_text']) && !empty($_POST['menu' . $z . '_lvl2_text'])) { 
        $oldCounter = $i; 
        $menu_string .= '<ul>'; 
        for ($zs = 0; $zs < count($_POST['menu' . $z . '_lvl2_text']); $zs++) { 
         $i = $i + 1; 
         [...use $i as before...]             
        } 
        $i = $oldCounter; 
        $menu_string .= '</ul>'; 
      } 
      $menu_string .= '</li>'; 
     }  
     $menu_string .= "';"; 

請注意,您的ID是不是唯一的。如果有100個子鏈接,你就麻煩了!

但是,我不明白你的第二個代碼塊,它是如何與你的問題相關的。