2013-04-10 73 views
2

我必須有標籤格式任務:顯示標籤由標籤來分類的列表中的項目

Array 
(
    [0] => stdClass Object 
     (
     [task_id] => 10, 
     [task_text] => Mow and fertilize, 
     [tags] => Array 
      (
       [0] => stdClass Object 
        (
        [tag_id] => 1, 
        [tag_text] => House, 
        [tt_tag_id] => 1, //from relational table, tt = task_tag 
        [tt_task_id] => 10, 
        [tt_id] => 20, //auto id from relational table 
        [tt_order] => 0 
       ), 
       [1] => stdClass Object 
        (
        [tag_id] => 2, 
        [tag_text] => Yard, 
        [task_tag_id] => 2, 
        [task_task_id] => 10, 
        [tt_id] => 21, 
        [tt_order] => 1 
       ) 
       [2] => stdClass Object 
        (
        [tag_id] => 5, 
        [tag_text] => Lawn, 
        [task_tag_id] => 5, 
        [task_task_id] => 10, 
        [tt_id] => 22, 
        [tt_order] => 2 
       ) 
      ) 
     ) 
    [1] => stdClass Object 
     (
     [task_id] => 11, 
     [task_text] => Unclog the sink drain, 
     [tags] => Array 
      (
       [0] => stdClass Object 
        (
        [tag_id] => 1, 
        [tag_text] => House, 
        [task_tag_id] => 1, 
        [task_task_id] => 11 
        [tt_id] => 30, 
        [tt_order] => 0 
       ), 
       [1] => stdClass Object 
        (
        [tag_id] => 3, 
        [tag_text] => Kitchen, 
        [task_tag_id] => 3, 
        [task_task_id] => 11, 
        [tt_id] => 31, 
        [tt_order] => 1 
       ) 
      ) 
     ) 
    [2] => stdClass Object 
     (
     [task_id] => 12, 
     [task_text] => Purchase new microwave, 
     [tags] => Array 
      (
       [0] => stdClass Object 
        (
        [tag_id] => 4, 
        [tag_text] => Apartment 1, 
        [task_tag_id] => 4, 
        [task_task_id] => 12 
        [tt_id] => 40, 
        [tt_order] => 0 
       ), 
       [1] => stdClass Object 
        (
        [tag_id] => 3, 
        [tag_text] => Kitchen, 
        [task_tag_id] => 3, 
        [task_task_id] => 12, 
        [tt_id] => 41, 
        [tt_order] => 1 
       ) 
      ) 
     ) 
) 

我希望能夠通過標籤的任務,這樣的排序:

Array 
(
[0] => stdClass Object 
     (
     [tag_id] => 1, 
     [task_text] => House, 
     [child_tags] => Array 
      (
       [0] => stdClass Object 
        (
        [tag_id] => 2, 
        [tag_text] => Yard, 
        [task_tag_id] => 2, 
        [task_task_id] => 10, 
        [tt_id] => 21, 
        [child_tags] => Array 
         (
          [1] => stdClass Object 
           (
            [tag_id] => 5, 
            [tag_text] => Lawn, 
            [task_tag_id] => 5, 
            [task_task_id] => 10, 
            [tt_id] => 22, 
            [task_id] => 10, 
            [task_text] => Mow and fertilize 
          ) 
         ), 
       [1] => stdClass Object 
       (
        [tag_id] => 3, 
        [tag_text] => Kitchen, 
        [task_tag_id] => 3, 
        [task_task_id] => 11, 
        [tt_id] => 31, 
        [task_id] => 11, 
        [task_text] => Unclog the sink drain, 
       ) 
      ) 
     ) 
[1] => stdClass Object 
     (
     [tag_id] => 4, 
     [tag_text] => Apartment 1, 
     [child_tags] => Array 
      (
       [0] => stdClass Object 
        (
        [tag_id] => 2, 
        [tag_text] => Kitchen, 
        [task_tag_id] => 2, 
        [task_task_id] => 10, 
        [tt_id] => 21, 
        [task_id] => 12, 
        [task_text] => Purchase new microwave 
       ) 
      ) 
     ) 
) 

最終我所拍攝的是:

<ul> 
    <lh>House</lh> 
    <li> 
     <ul> 
     <lh>Kitchen</lh> 
     <li>Unclog the sink drain</li> 
     </ul> 
    </li> 
    <li> 
     <ul> 
     <lh>Yard</lh> 
      <li> 
      <ul> 
       <lh>Lawn</lh> 
       <li>Mow and fertilize</li> 
      </ul> 
      </li> 
     </ul> 
    </li> 
</ul> 
<ul> 
    <lh>Apartment 1</lh> 
    <li> 
     <ul> 
     <lh>Kitchen</lh> 
     <li>Purchase new microwave</li> 
     </ul> 
    </li> 
</ul> 

該數據庫正是你想象的。任務表和具有n2n關係表的標籤表。

似乎沒有一種簡單的方法來循環執行任務和標籤,以這種方式進行排序。我應該嘗試不同的方法嗎?這是愚蠢的嗎?

+1

我不 請參閱標籤的任何父/子引用,那麼如何讓它們像這樣的層次結構?此外,''項目不在HTML規範中,因此請避免它。 – 2013-04-10 19:22:10

+0

起初,我試圖通過tt_id命令,這不是真的是什麼,所以我添加了一個tt_order列,這是標籤與任務相關聯的順序。添加後我可能會接近我自己的解決方案。 – DrCorduroy 2013-04-10 21:24:28

回答

0

如果你可以在分層結構中構造你的數組(例如拉動你所有的標籤並將任務分配給每個標籤的嵌套數組),類似於你的最終結構的未分類版本,你可以嘗試兩個遞歸循環:

  1. 拿1級項目,排序()這個
  2. 對於每一個1級的項目,把它打印出來,並整理了2級
  3. 重複,直到下降到最低水平
+0

我確實使用了一個按照你所描述的方式運行的遞歸函數。 – DrCorduroy 2014-01-15 22:13:40