如何从具有父ID的数据库结果数组创建嵌套的多维数组 [英] How to created nested multi dimensional array from database result array with parent id

查看:40
本文介绍了如何从具有父ID的数据库结果数组创建嵌套的多维数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新手.

我正在学习 ZF2,我需要从数据库值形成嵌套的多维数组.我的数据库表:

I am learning ZF2 where I need to form a nested multi dimensional array from database values. My database table:

+-------------+----------------+---------------------+--------+
| category_id | name           | parent_category_ids | status |
+-------------+----------------+---------------------+--------+
|           1 | New Category   | 1                   |      1 |
|           3 | ddd            | 1                   |      1 |
|           4 | test1          | 3                   |      0 |
|           5 | Test123 recipe | 3                   |      1 |
|           6 | abceg          | 3                   |      1 |
|           7 | xyz            | 6                   |      1 |
+-------------+----------------+---------------------+--------+

结果数组应该是这样的:

resultant array should be look like this:

Array
(
    [1] => Array
        (
            [id] => 3
            [name] => ddd
            [sub] =>
             Array
            (
                [0] => Array
                (
                    [id] => 4
                    [name] => test1
                    [sub] => None
                )
                [1] => Array
                (
                    [id] => 5
                    [name] => Test123 recipe
                    [sub] => None
                )
                [2] => Array
                (
                    [id] => 6
                    [name] => abceg
                    [sub] => 
                    Array
                    (
                        [0] => Array
                        (
                            [id] => 7
                            [name] => xyz
                            [sub] => 6
                        )
                    )
                )
            )
        )

)

到目前为止我已经尝试过这个代码,但没有积极的结果

I have tried this code so far but no positive result

> foreach ($categoryList as $key => $value) {
>         if ($value->getCategoryId()!=1) {
>             $category[$key]['id'] = $value->getCategoryId();
>             $category[$key]['name'] = $value->getName();
>             $category[$key]['sub'] = $this->createSubCategoryArray($value->getCategoryId(), $categoryList);
>         }
>     }
>     public function createSubCategoryArray($parentCatId, $categoryList)
>     {
>         foreach ($categoryList as $key => $category) {
>             if($category->getCategoryId() == $parentCatId && $category->getCategoryId()!=1){
>                 return array(
>                     'id' => $category->getCategoryId(),
>                     'name' => $category->getName(),
>                     'sub' => $this->createSubCategoryArray($category->getCategoryId(),
> $categoryList)
>                 );
>             }
>         }
>     }

推荐答案

你可以反转你的结果并收集你的数组

You can reverse your result and collect your array

// ordered by parent
$src = array(
    ['cid'=>'1','name'=>'Rootcat','parent'=>'1'],
    ['cid'=>'3','name'=>'dddd','parent'=>'1'],
    ['cid'=>'4','name'=>'test1','parent'=>'3'],
    ['cid'=>'5','name'=>'Test123 rec','parent'=>'3'],
    ['cid'=>'6','name'=>'abceg','parent'=>'3'],
    ['cid'=>'7','name'=>'JHGSGF','parent'=>'5'],
);
// inverse array, better take it sorted by parent_id desc
$data = array_reverse($src,false);
$for_parent = [];
$result = [];

foreach($data as $rec) {
    if (isset($for_parent[$rec['cid']])) {
        $rec['sub'] = $for_parent[$rec['cid']];
        unset($for_parent[$rec['cid']]);
    }
    $for_parent[$rec['parent']] []= $rec; 
}

print_r($for_parent);

结果示例:

Array
(
    [1] => Array
        (
            [0] => Array
                (
                    [cid] => 1
                    [name] => Rootcat
                    [parent] => 1
                    [sub] => Array
                        (
                            [0] => Array
                                (
                                    [cid] => 3
                                    [name] => dddd
                                    [parent] => 1
                                    [sub] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [cid] => 6
                                                    [name] => abceg
                                                    [parent] => 3
                                                )

                                            [1] => Array
                                                (
                                                    [cid] => 5
                                                    [name] => Test123 rec
                                                    [parent] => 3
                                                    [sub] => Array
                                                        (
                                                            [0] => Array
                                                                (
                                                                    [cid] => 7
                                                                    [name] => JHGSGF
                                                                    [parent] => 5
                                                                )

                                                        )

                                                )

                                            [2] => Array
                                                (
                                                    [cid] => 4
                                                    [name] => test1
                                                    [parent] => 3
                                                )

                                        )

                                )

                        )

                )

        )

)

这篇关于如何从具有父ID的数据库结果数组创建嵌套的多维数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆