最新赞助活动温馨提示:自愿赞助服务器费用,学生和没有工作的整站资源免费下载!
头像

极简代码实现高性能无限级分类

来源:http://erdangjiade.com/php/1175.html 沐浴春风 2017-02-22 19:32浏览(1744)

极简代码实现高性能无限级分类(非递归迭代),关键代码其实只有一行.

0、请不要问“在不在”之类的问题,有问题直接问!1、学生或暂时没有工作的童鞋,整站资源免费下载!2、¥9.9充值终身VIP会员,加我微信,826096331 拉你进VIP群学习!3、程序员加油,技术改变世界。 在线 充值

极简代码实现高性能无限级分类
分类:PHP > 函数 难易:初级
查看演示 下载资源:

加我微信,拉你进VIP群学习:

下载资源 下载积分: 0 积分

极简代码实现高性能无限级分类(非递归迭代),关键代码其实只有一行.

$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' => '',
                    ],
            ],
    ]
评论7
头像

友情提示:垃圾评论一律封号 加我微信:826096331拉你进VIP群学习群

  • 头像 6楼
    12-20 14:12
    liner0311
    正在学习PHP,这个分类的源代码很不错
  • 头像 5楼
    07-14 11:49
    xzszxiong
    并不能真正做到无极限
  • 头像 4楼
    06-25 10:43
    phpCalf
    太棒啦,很好的
  • 头像 3楼
    05-19 14:23
    默默的无恙
    很好的资源努力学习
  • 头像 板凳
    03-14 13:08
    13717866946@163.com
    很好的资源,努力学习
  • 头像 椅子
    03-13 09:32
    274923203
    可以 厉害
  • 头像 沙发
    03-01 11:31
    dwxlzy
    不错,学习学习了。
1 2