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

________________________________________________________________________
| 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
————————————————————————————————————————————————————————————————————————

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

甜食
甜罐头
锡拉苏古拉
卡朱卡特里
拉斯马拉伊
但我得到的结果却不一样:

甜食
甜罐头
卡朱卡特里
拉斯马拉伊
锡拉苏古拉
这是我的代码点火器代码:
    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;
}

上面的代码给了我一个提示错误:未定义的索引:title

最佳答案

问题是您的嵌套代码引用$数组中不存在的ID。
对于“Tun-RasuulLA”,PalthSuid=3,它不存在于$数组的根级上,所以当它实际上试图找到具有ID“3”的父级ID时,它就被创建了。
这应该有效:

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;
}

关于php - 在多层次类别层次结构中面临一些问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29317475/

10-13 00:50