2012-09-08 29 views
4

我要做一個無限的列表,用李和UL標籤從PDO(取出)創造無限UL L1標籤從獲取數組(列表)

我陣列我的數組結果:

Array ( 
[0] => Array ([category_label] => catLevel4 [category_id] => 22 [category_owner] => 21) 
[1] => Array ([category_label] => catLevel3 [category_id] => 21 [category_owner] => 20) 
[2] => Array ([category_label] => catLevel2 [category_id] => 23 [category_owner] => 8) 
[3] => Array ([category_label] => catLevel2 [category_id] => 24 [category_owner] => 8) 
[4] => Array ([category_label] => catLevel2 [category_id] => 20 [category_owner] => 6) 
[5] => Array ([category_label] => catLevel1 [category_id] => 6 [category_owner] => 0) 
[6] => Array ([category_label] => catLevel1 [category_id] => 7 [category_owner] => 0) 
[7] => Array ([category_label] => catLevel1 [category_id] => 8 [category_owner] => 0) 
) 

我想:

catLevel1 
catLevel2 
    catLevel3 
    catLevel4 
catLevel1 
catLevel1 
catLevel2 
catLevel2 

我爲轉換功能:

function getCategory($parentCategoryId,$data) 
{ 
    foreach($data as $row){if($row['category_owner']==$parentCategoryId){?> 
    <li catId='<?php echo $row['category_id']?>'><a><?php echo $row['category_label'];?></a> 
      <ul> 
      <?php getCategory($row['category_id'],$data) ;?> 
      </ul> 
    </li> 
    <?php };} 
} 

echo getCategory(0,$this->categorysList); 

這個功能是很不錯的工作對我來說,但創建空<ul></ul>所有物品!

我感謝你的幫助,以建立一個標準的功能; d

+0

爲什麼不是最後的4個輸出像'catlevel1 - > catlevel2 | catlevel1 - > catlevel2'? – hjpotter92

+0

@GiantofaLannister,因爲'category_owner'不匹配。這有點奇怪,但它就是這樣。 –

+0

我想創建無限制 類別列表 –

回答

2

你得到空<ul>標籤,因爲你硬編碼它沒有任何檢查,並輸出每次迭代。嘗試是這樣的:

<?php 

function getCategory($parentCategoryId, $data) { 
    foreach ($data as $row) { 
     if ($row['category_owner'] == $parentCategoryId) { 
      $str .= ' 
<li catId="' . $row['category_id'] . '"><a>' . $row['category_label'] . '</a>' . "\n"; 
      $res = getCategory($row['category_id'], $data); 
      if ($res) { 
       $str .= ' 
    <ul>' . $res . '</ul> 
    ' . "\n"; 
      } 
      $str .= ' 
</li>' . "\n"; 
     } 
    } 
    return $str; 
} 

$str = getCategory(0, $data); 
echo $str; 

?> 

所以,你得到的輸出是這樣的:

<li catId="6"> 
    <a> catLevel1</a> 
    <ul> 
     <li catId="20"> 
      <a> catLevel2</a> 
      <ul> 
       <li catId="21"> 
        <a> catLevel3</a> 
        <ul> 
         <li catId="22"> 
          <a> catLevel4</a> 
         </li> 
        </ul> 
       </li> 
      </ul> 
     </li> 
    </ul> 
</li> 
<li catId="7"> 
    <a> catLevel1</a> 
</li> 
<li catId="8"> 
    <a> catLevel1</a> 
    <ul> 
     <li catId="23"> 
      <a> catLevel2</a> 
     </li> 
     <li catId="24"> 
      <a> catLevel2</a> 
     </li> 
    </ul> 
</li>