2013-04-10 74 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