首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将树数组结构转换为关联数组,并在每个数组中为面包屑添加额外字段

将树数组结构转换为关联数组,并在每个数组中为面包屑添加额外字段
EN

Stack Overflow用户
提问于 2017-05-18 11:32:46
回答 1查看 157关注 0票数 1

我的桌子结构是这样的:

id -类别-类别-父类

类别见表的图像

我的模态代码:

public function getData($table) { return $this->db->select('*')->get($table)->result_array(); }

我得到了这样一个数组:

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Mobile Phones
            [parent] => 0
            [date] => 2017-05-16 08:55:22
            [slug] => mobile-phones
        )

    [1] => Array
        (
            [id] => 2
            [name] => Samsung
            [parent] => 1
            [date] => 2017-05-16 08:55:29
            [slug] => samsung
        )

    [2] => Array
        (
            [id] => 3
            [name] => Apple
            [parent] => 1
            [date] => 2017-05-16 18:07:56
            [slug] => apple
        )

    [3] => Array
        (
            [id] => 4
            [name] => Huawei
            [parent] => 1
            [date] => 2017-05-16 18:08:10
            [slug] => huawei
        )

    [4] => Array
        (
            [id] => 5
            [name] => HTC
            [parent] => 1
            [date] => 2017-05-16 18:08:22
            [slug] => htc
        )

    [5] => Array
        (
            [id] => 6
            [name] => OnePlus
            [parent] => 1
            [date] => 2017-05-16 18:08:33
            [slug] => oneplus
        )

    [6] => Array
        (
            [id] => 7
            [name] => LG
            [parent] => 1
            [date] => 2017-05-16 18:08:44
            [slug] => lg
        )

    [7] => Array
        (
            [id] => 8
            [name] => BlackBerry
            [parent] => 1
            [date] => 2017-05-16 18:08:55
            [slug] => blackberry
        )

    [8] => Array
        (
            [id] => 9
            [name] => Motorola
            [parent] => 1
            [date] => 2017-05-16 18:09:14
            [slug] => motorola
        )

    [9] => Array
        (
            [id] => 10
            [name] => Google
            [parent] => 1
            [date] => 2017-05-16 18:09:52
            [slug] => google
        )
    )

但我想得到一个如下数组:

代码语言:javascript
复制
Array
(
    [0] => Array
        (

            [id] => 1
            [name] => Mobile Phones
            [parent] => 0
            [date] => 2017-05-16 08:55:22
            [slug] => mobile-phones
            [root_category] => null
        )

    [1] => Array
        (
            [id] => 2
            [name] => Samsung
            [parent] => 1
            [date] => 2017-05-16 08:55:29
            [slug] => samsung
            [root_category] => Mobile Phones

        )

    [2] => Array
        (
            [id] => 3
            [name] => android
            [parent] => 2
            [date] => 2017-05-16 18:07:56
            [slug] => android
            [root_category] => Mobile Phones > Samsung

        )

    [3] => Array
        (
            [id] => 4
            [name] => Huawei
            [parent] => 3
            [date] => 2017-05-16 18:08:10
            [slug] => huawei
            [root_category] => Mobile Phones > Samsung > android
        )

    [4] => Array
        (
            [id] => 5
            [name] => HTC
            [parent] => 1
            [date] => 2017-05-16 18:08:22
            [slug] => htc
            [root_category] => Mobile Phones
        )

    [5] => Array
        (
            [id] => 6
            [name] => OnePlus
            [parent] => 1
            [date] => 2017-05-16 18:08:33
            [slug] => oneplus
            [root_category] => Mobile Phones 
        )

    [6] => Array
        (
            [id] => 7
            [name] => LG
            [parent] => 1
            [date] => 2017-05-16 18:08:44
            [slug] => lg
            [root_category] => Mobile Phones 
        )

    [7] => Array
        (
            [id] => 8
            [name] => Men Fashion
            [parent] => 0
            [date] => 2017-05-16 18:08:55
            [slug] => men-fashion
            [root_category] => null
        )

    [8] => Array
        (
            [id] => 9
            [name] => shirt
            [parent] => 8
            [date] => 2017-05-16 18:09:14
            [slug] => shirt
            [root_category] => Men fashion
        )

    [9] => Array
        (
            [id] => 10
            [name] => T shirt
            [parent] => 9
            [date] => 2017-05-16 18:09:52
            [slug] => google
            [root_category] => Men Fashion > shirt
        )
}

顺便说一下我用的是代码点火器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-18 17:12:08

从数据库逻辑构建层次结构并不是一个很好的实践。

数据库表结构已经足够好存储父表。

您需要有一个函数来递归调用它。

如果您的目标是创建面包屑,我假设您需要从最低层次结构向上攀升,直到parent值为= 0为止。

代码语言:javascript
复制
function display_sub($id=0)
{
    $breadcrumb = [];

    // I assume your these are your model and function name.
    $category = $this->item_model->get_category($id);

    if($category['parent'] != 0)
    {

        // if parent not 0, add the name to $breadcrumb array,
        // then do another run of this function 
        // but take this menu's parent id as parameter
        array_push($breadcrumb,$row['name']);
        $this->display_sub($row['parent']);

    } else {

        // if parent already 0, it's finish the job.
        // and you can reverse it and display as intended.
        return $breadcrumb;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44046598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档