Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在按标记排序的列表中显示标记的项目_Php_Arrays_Codeigniter_Tags_Relationship - Fatal编程技术网

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关系表的标记表


似乎没有一种简单的方法可以循环遍历任务和标记,以这种方式对它们进行排序。我应该尝试不同的方法吗?这很愚蠢吗?

如果您可以在分层结构中构造数组(即,提取所有标记并将任务分配为每个标记的嵌套数组),类似于最终结构的未排序版本,您可以尝试两个递归循环:

  • 以1级项目为例,排序()如下
  • 对于每个级别1项目,打印出来并对级别2进行排序
  • 重复此操作,直到降至最低水平

  • 我看不到任何标记的父/子引用,那么您应该如何在这样的层次结构中获取它们呢?另外,
    项不在HTML规范中,因此请避免使用它。起初,我试图按tt_id进行排序,但这并不是真正的目的。因此,我添加了一个tt_order列,这是标记与任务关联的顺序。在添加这个之后,我可能已经接近我自己的解决方案了。我最终使用了一个递归函数,正如您所描述的那样运行。