栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

PHP无限极分类-一次循环模式(不使用递归)

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PHP无限极分类-一次循环模式(不使用递归)

在平时工作中, 经常需要将普通列表数据, 处理成树, 列表数据结构大致如下:

+----+--------------+-----+| id | name         | pid |+----+--------------+-----+|  1 | 媒体(白名单) |   0 ||  2 | 党媒公共平台 |   0 ||  3 | 政府机构     |   0 ||  4 | 其他         |   0 ||  5 | 中央媒体     |   1 ||  6 | 地方媒体     |   1 ||  7 | 门户媒体     |   4 ||  8 | 综合媒体     |   4 ||  9 | 专业媒体     |   4 || 11 | 河北省       |   6 || 12 | 山东省       |   6 || 13 | 辽宁省       |   6 || 34 | 北京         |   6 || 45 | 视频         |   9 || 46 | 教育         |   9 || 79 | 法律         |   9 || 80 | 其他         |   9 || 81 | 文学         |   9 |+----+--------------+-----+

常规实现方式是使用递归模式, 但是在笔者工作中, 需要处理很大的数据量, 使用递归, 会严重影响性能,  而用一次循环方式也可以很好的处理在处理大数据量时, 性能会提示非常多

完整代码如下

 &$item){        // 获取出每一条数据的父id
        $pid = &$item['pid'];        // 将每一个item的引用保存到$map中
        $map[$item['id']] = &$item;        // 如果在map中没有设置过他的pid, 说明是根节点, pid为0,
        if(!isset($map[$pid])){            // 将pid为0的item的引用保存到$res中
            $res[$id] = &$item;
        }else{            // 如果在map中没有设置过他的pid, 则将该item加入到他父亲的叶子节点中
            $pItem = &$map[$pid];
            $pItem[$childKey][] = &$item;
        }
    }    return $res;
}

最终处理结果如下:


image.png



作者:其实我很dou
链接:https://www.jianshu.com/p/c7d6f9a9f42d


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/227155.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号