【问题标题】:Facing some issues in multi level category hierarchy面临多级类别层次结构中的一些问题
【发布时间】:2015-03-28 13:00:21
【问题描述】:

我想通过使用邻接列表模型简单地创建一个多级(三层深)类别层次结构。

分类表:

________________________________________________________________________
| id              |  parent_id     | name            | page_order
————————————————————————————————————————————————————————————————————————
| 1               |  0             | Home            |     0
| 2               |  0             | sweets          |     0
| 3               |  2             | tin sweet       |     0
| 4               |  3             | tin rasugulla   |     0
| 5               |  2             | kaju katri      |     0
| 6               |  2             | ras malai       |     0
————————————————————————————————————————————————————————————————————————

我的结果应该是这样的(根据上表):

  • 首页
  • 糖果
    • 锡甜
      • 锡拉苏古拉
    • kaju 卡特里
    • 拉斯马莱

但我得到的输出几乎没有什么不同:

  • 首页
  • 糖果
    • 锡甜
    • kaju 卡特里
    • 拉斯马莱
    • 锡拉苏古拉

这是我的代码点火器代码:

    public function get_nested(){
             // fetching categories from table
             $this->db->order_by($this->_order_by);
    $pages = $this->db->get($this->_table_name)->result_array();

    // now creating category tree
    foreach ($pages as $page){
        if ($page['parent_id'] == 0){
             $array[$page['id']] = $page;
        }else {
            $array[$page['parent_id']]['children'][$page['id']] = $page;
        }
    }
    return $array;
}

查询结果截图:var_dump($pages);

var_dump($array)的快照:

这是一个创建输出列表的代码:

function toUL($array)
{
    $html = '<ul>' . PHP_EOL;

    foreach ($array as $value)
    {
        $html .= '<li>' . $value['title'];

        // do we have any children?
        if (isset($value['children']) && count($value['children'])){
            $html .= toUL($value['children']);
        }
        $html .= '</li>' . PHP_EOL;
    }

    $html .= '</ul>' . PHP_EOL;

    return $html;
}

我上面的代码给了我通知错误:未定义的索引:标题

【问题讨论】:

  • 你能把查询结果贴出来$pagesarray
  • get_nested 函数不会产生你想要的数组,它会产生 2 层数组。
  • 好的.. 我正在发布 var_dump($array) 的快照
  • 看我发布了一个查询结果..

标签: php mysql codeigniter hierarchy hierarchical-data


【解决方案1】:

问题是您的嵌套代码引用了 $array 中不存在的 ID。

对于“tin rasugulla”,parent_id = 3,它在 $array 的根级别上不存在,因此它被创建,实际上它应该尝试查找 ID 为 3 的父级,它低于“sweets” .

这应该可行:

public function get_nested(){
    // fetching categories from table
    $this->db->order_by($this->_order_by);
    $pages = $this->db->get($this->_table_name)->result_array();

    // now creating category tree
    foreach ($pages as $page){
        if ($page['parent_id'] == 0){
            $array[$page['id']] = $page;
        } elseif (isset($array[$page['parent_id']])) {
            $array[$page['parent_id']]['children'][$page['id']] = $page;
        } else {
            foreach ($array as $root_id => $parent) {
                if (isset($parent['children'][$page['parent_id']])) {
                    $array[$root_id]['children'][$page['parent_id']]['children'][$page['id']] = $page;
                }
            }
        }
    }
    return $array;
}

【讨论】:

  • 太棒了!我已经编辑了我的帖子以包含您的建议,因为我没有足够的业力直接接受它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 2011-01-18
  • 2013-07-04
  • 2023-04-03
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多