2013-02-11 61 views
0

我在遇到以下情況時遇到困難,我有一個帶有類別的數組,因此類別可以具有子類別,並且子類別可以無限地具有子類別。現在我想要實現的是以下內容,但我無法實現這一點。使用表格構建層次結構 - PHP

我有一個數組$items在下面的結構

Array 
(
    [0] => Array 
     (
      [label] => Main Cat 
      [id] => 29 
      [parent_id] => 19 
     ) 

    [1] => Array 
     (
      [label] => Main Cat 
      [id] => 17 
      [parent_id] => 19 
     ) 

    [2] => Array 
     (
      [label] => Main Cat 
      [id] => 20 
      [parent_id] => 19 
      [items] => Array 
       (
        [0] => Array 
         (
          [label] => Child Level 1 
          [id] => 21 
          [parent_id] => 20 
         ) 

        [1] => Array 
         (
          [label] => Child Level 1 
          [id] => 22 
          [parent_id] => 20 
          [items] => Array 
           (
            [0] => Array 
             (
              [label] => Child Level 2 
              [id] => 27 
              [parent_id] => 22 
              [items] => Array 
               (
                [0] => Array 
                 (
                  [label] => Child Level 3 
                  [id] => 28 
                  [parent_id] => 27 
                 ) 

               ) 

             ) 

           ) 

         ) 

        [2] => Array 
         (
          [label] => Child Level 1 
          [id] => 23 
          [parent_id] => 20 
         ) 

        [3] => Array 
         (
          [label] => Child Level 1 
          [id] => 24 
          [parent_id] => 20 
          [items] => Array 
           (
            [0] => Array 
             (
              [label] => Child Level 2 
              [id] => 25 
              [parent_id] => 24 
             ) 

            [1] => Array 
             (
              [label] => Child Level 2 
              [id] => 26 
              [parent_id] => 24 
             ) 

           ) 

         ) 

       ) 

     ) 

) 

現在我想下面的數組在每個孩子的水平縮進顯示錶,如果它應該去一個級別的子級別3兒童2級的降位應該再次改變。

<table border="2" width="100%"> 
    <tr> 
     <td>Main Cat</td> 
    </tr> 
    <tr> 
     <td>Main Cat</td> 
    </tr> 
    <tr> 
     <td>Main Cat</td> 
    </tr> 
    <tr> 
     <td style="margin-left:20px;">Child Level 1</td> 
    </tr> 
    <tr> 
     <td style="margin-left:20px;">Child Level 1</td> 
    </tr> 
    <tr> 
     <td style="margin-left:40px;">Child Level 2</td> 
    </tr> 
    <tr> 
     <td style="margin-left:60px;">Child Level 3</td> 
    </tr> 
    <tr> 
     <td style="margin-left:20px;">Child Level 1</td> 
    </tr> 
    <tr> 
     <td style="margin-left:20px;">Child Level 1</td> 
    </tr> 
    <tr> 
     <td style="margin-left:40px;">Child Level 2</td> 
    </tr> 
    <tr> 
     <td style="margin-left:40px;">Child Level 2</td> 
    </tr> 
</table> 

我的PHP代碼如下迄今爲止,

public function renderCategoriesRecursive($items) 
     { 
       foreach($items as $item) 
       { 

         $itemCount = count($item['items']); 



         echo CHtml::openTag('tr'); 
          echo CHtml::openTag('td',array('class'=>$class)); 
           echo $item['label']; 
          echo CHtml::closeTag('tr'); 
         echo CHtml::closeTag('tr'); 


         if(isset($item['items']) && $itemCount) 
         { 

           $this->renderCategoriesRecursive($item['items']); 

         } 
       } 
} 

變量$項目包含上述

+0

爲什麼不使用JSON?這就是它的目的。 http://php.net/manual/en/book.json.php – 2013-02-11 22:06:49

+0

這個問題與JSON無關......除非你的意思是讓他使用AJAX並用Javascript模板構建客戶端。 – runspired 2013-02-11 22:13:54

+1

你真的應該使用嵌套列表,但我會給你一個解決方案下面使用表格。 – runspired 2013-02-11 22:15:58

回答

1

我發現自己的解決方案中引用的數組變量$ class,所以我也加入了它。你真的不需要使用CHtml(除非你這樣做,但我從未見過這種情況)

function renderItems($array, $class, $indent = 0 ) { 

    foreach($items as $item) { 
     echo '<tr><td class="'.$class.'">'.$item['label'].'</td></tr>'; 

     if(isset($item['items'] && count($item['items']) 
      renderItems($item['items'],$class,$indent+1); 
    } 

} 
+0

謝謝你的解決方案,其實它真的很簡單;-)我幾乎在那裏;-)無論如何,我用你的解決方案,它的工作就像一個魅力。再一次,謝謝你,節省了我很多時間 – Roland 2013-02-12 06:29:07