2013-01-23 15 views
-1

我有一些問題,生成我的數據庫(網站地圖)的完整樹。
我達到了我想要編寫更好代碼的級別。這就是爲什麼我選擇這個謎題的遞歸函數。遞歸站點地圖數組函數php

我想生成一個無限的無序列表。 像這樣:

<ul> 
<li><a></a> 
    <ul> 
    <li><a></a>(subs) 
    etc etc etc..... 
    </ul> 
</li> 
</ul> 

就像我已經說過我嘗試了以下內容:

<?php 
    function traverseArray($array, $sub=false) 
    { 
     foreach($array as $cat) 
     { 
      if(isset($cat['childeren']) && is_array($cat['childeren'])) 
      { 
       //a category with subs 
       echo('<ul id="'.$cat['parent_cat_id'].'" class="lv0">'); 
        echo('<li id="'.$cat['parent_cat_id'].'"><a href=#>'.$cat['name'].'</a>'."\n"); 
       traverseArray($cat['childeren'], true); 
      }else{ 
       if($sub){ 
        //a sub category of category 
        echo('</ul></li>'); 
        echo('<li id="'.$cat['parent_cat_id'].'"><a href=#>'.$cat['name'].'</a></li>'."\n");     
       }else{ 
        //category with no subs 
        echo('<ul id="'.$cat['parent_cat_id'].'" class="lv0">');    
         echo('<li id="'.$cat['parent_cat_id'].'"><a href=#>'.$cat['name'].'</a></li>'."\n"); 
        echo('</ul>'); 
       } 
      } 
     } 
    } 
    traverseArray($sitemap); 
?> 

,但是這是一個謎,我不能正確地計算出, 這個結果至今(亂):

<ul id="0" class="lv0"> 
    <li id="0"><a href=#>Headsets</a> 
</ul></li> 

<li id="1"><a href=#>(USB) headsets ....</a></li> 
</ul></li> 
<li id="1"><a href=#>... headsets</a></li> 
</ul></li> 
<li id="1"><a href=#>.. USB headsets</a></li> 
</ul></li> 
<li id="1"><a href=#>Bluetooth headsets</a></li> 
<ul id="0" class="lv0"> 
    <li id="0"><a href=#>Unified Communications</a></li> 

一團糟! 在$網站地圖陣列看起來像這樣:

Array 
(
    [0] => Array 
     (
      [category_id] => 1 
      [parent_cat_id] => 0 
      ..........etc 
      ........etc 
      [type] => cat 
      [childeren] => Array 
       (
        [0] => Array 
         (
          [category_id] => 2 
          [parent_cat_id] => 1 
          .......etc 
          [type] => cat 
          [childeren] => Array 
           (
            [0] => Array 
             (
              [category_id] => 32 
              [parent_cat_id] => 16 
              .......etc 
              [type] => series 
             )        
         ) 

所以childeren在childeren childeren, 這是做到這一點的最好辦法/在正確的軌道上?

或者有沒有方法嗎? 像SQL樹的東西?或者只是在foreach中的舊foreach ..(我試圖避免這個時間)。

任何幫助將不勝感激!

由於提前,

雅各

+0

發現本網站上的一些有用的mSQL的查詢: 仍然不知道這是否是這樣做的正確的方式, http://mikehillyer.com/articles/managing -hierarchical-data-in-mysql/ – Jacob

+0

請幫我解決我的問題(http://stackoverflow.com/questions/17673917/confused-to-make-sitemap-using-php-coding)與此相同的問題 – user2173803

回答

0

「什麼是錯我的代碼?」是不是一個問題stackoverflow。

想想'traverseArray'函數應該做些什麼。 你的代碼亂七八糟。 這裏是一個清理數組遍歷的例子。 請它適合你的需求:

function traverseArray($array) 
{ 
    echo '<ul>'; 
    foreach($array as $cat) 
    { 
     echo '<li>'; 
     if(isset($cat['childeren']) && is_array($cat['childeren'])) 
     { 
      echo '<a href="#">' . $cat['name'] . '</a>'; 
      traverseArray($cat['childeren']); 
     } 
     else 
     { 
      echo '<a href="' . $cat['url'] . '">' . $cat['name'] . '</a>'; 
     } 
     echo '</li>'; 
    } 
    echo '</ul>'; 
} 

traverseArray($sitemap); 
+0

感謝您的回答,但是,我確實知道這不是問我網站代碼有什麼問題的網站!也許我發音錯誤的問題,它應該是什麼東西喜歡這個,你怎麼反向(陣列)下樹和輸出嵌套列表?或者以這種方式。我也知道我的代碼很混亂,告訴過你。我甚至在一開始就嘗試過這個選項。當我想要輸出樹的第一項時,它開始變得混亂,因爲現在你只能得到孩子。 – Jacob

+0

添加了輸出樹的第一個元素。請檢查。 – fsw

+0

太棒了!謝謝,我無法弄清楚自己的身份(還是無法理解它)。 – Jacob