Php 在按标记排序的列表中显示标记的项目
我的任务具有以下格式的标记:Php 在按标记排序的列表中显示标记的项目,php,arrays,codeigniter,tags,relationship,Php,Arrays,Codeigniter,Tags,Relationship,我的任务具有以下格式的标记: Array ( [0] => stdClass Object ( [task_id] => 10, [task_text] => Mow and fertilize, [tags] => Array ( [0] => stdClass Object (
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>
房子
-
厨房
- 疏通下水道
-
院子
-
草坪
- 割草施肥
1号公寓
-
厨房
- 购买新的微波炉
数据库正是你想象的那样。任务表和带有n2n关系表的标记表
似乎没有一种简单的方法可以循环遍历任务和标记,以这种方式对它们进行排序。我应该尝试不同的方法吗?这很愚蠢吗?如果您可以在分层结构中构造数组(即,提取所有标记并将任务分配为每个标记的嵌套数组),类似于最终结构的未排序版本,您可以尝试两个递归循环:
我看不到任何标记的父/子引用,那么您应该如何在这样的层次结构中获取它们呢?另外,
项不在HTML规范中,因此请避免使用它。起初,我试图按tt_id进行排序,但这并不是真正的目的。因此,我添加了一个tt_order列,这是标记与任务关联的顺序。在添加这个之后,我可能已经接近我自己的解决方案了。我最终使用了一个递归函数,正如您所描述的那样运行。