极简代码实现高性能无限级分类(非递归迭代)

浏览:1095 最后更新:2016-12-01 10:09 分类:函数 关键字: 无限分类 无限回复 无限盖楼 引用 无限级分类
关键代码其实只有一行$return[$v['pid']]['child'][$v['id']] = &$return[$k];但是为了实现较为复杂的扩展,这里添加一些额外的信息

目前这方法的缺点是:无法获取目录的层级信息

================数据部分//这个是元数据,你可以从数据库里面进行读取并且不需要进行转换
//因为代码部分会进行遍历处理

$list[] = ['id' => 0, 'pid' => -1, 'name' => 'A@0'];
//-1用于后面的根目录判断
//你也可以修改为0并修改后面的 if ($v['pid'] >= 0) 为  if ($v['pid'] > 0)
//数据库id应该不会出现等于0的情况吧
$list[] = ['id' => 1, 'pid' => 0, 'name' => 'A@1'];
$list[] = ['id' => 2, 'pid' => 0, 'name' => 'A@2'];
$list[] = ['id' => 3, 'pid' => 2, 'name' => 'A@3'];
$list[] = ['id' => 4, 'pid' => 3, 'name' => 'A@4'];
$list[] = ['id' => 5, 'pid' => 0, 'name' => 'A@5'];
$list[] = ['id' => 6, 'pid' => 1, 'name' => 'A@6'];
==========代码部分$return = [];//索引目录
$parent='';//根目录,


//数组预处理,这里的$v['id']一定要唯一,不然可能会出现被覆盖的情况
foreach ($list as $v)
    $return[$v['id']] = [
        'id' => $v['id'],
        'name' => $v['name'],
        'pid' => $v['pid'],
        'child' => '',
    ];



//将每个目录与父目录进行拼接,并找到根目录
foreach ($return as $k=>$v) {
    if ($v['pid'] >= 0)
//找到父路径,这里没有判断 $return[$v['pid']]['child']是否存在,
//TP5下或者在不存在的情况下可能会报错,自己加一下
        $return[$v['pid']]['child'][$v['id']] = &$return[$k];
    else
//找到根目录
        $parent = &$return[$k];
}

//打印根目录
var_export($parent);
=========输出结果[
        'id' => 0,
        'name' => 'A@0',
        'pid' => -1,
        'child' =>
            [
                1 =>
                    [
                        'id' => 1,
                        'name' => 'A@1',
                        'pid' => 0,
                        'child' =>
                            [
                                6 =>
                                    [
                                        'id' => 6,
                                        'name' => 'A@6',
                                        'pid' => 1,
                                        'child' => '',
                                    ],
                            ],
                    ],
                2 =>
                    [
                        'id' => 2,
                        'name' => 'A@2',
                        'pid' => 0,
                        'child' =>
                            [
                                3 =>
                                    [
                                        'id' => 3,
                                        'name' => 'A@3',
                                        'pid' => 2,
                                        'child' =>
                                            [
                                                4 =>
                                                    [
                                                        'id' => 4,
                                                        'name' => 'A@4',
                                                        'pid' => 3,
                                                        'child' => '',
                                                    ],
                                            ],
                                    ],
                            ],
                    ],
                5 =>
                    [
                        'id' => 5,
                        'name' => 'A@5',
                        'pid' => 0,
                        'child' => '',
                    ],
            ],
    ]
代码为本人原创
文章路径为:http://blog.csdn.net/chenzhuyu/article/details/52975633
欢迎各位批评拍砖
评论( 相关
后面还有条评论,点击查看>>