雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

对无限级分类数据进行重新排序(非树形结构)

2024-08-29 48

无限级分类查询有很多方式。本文记录的方式是先将所有数据查出来,再使用递归对数据进行排序,并附加层级字段(level)。此方式仅仅对无限级的数据进行排序,并没有将子级内容放入父级。

1. 先看效果图


对无限级分类进行排序,并附加层级字段" class="reference-link" target="_blank">2. 在 TP6.0 中使用的 对无限级分类进行排序,并附加层级字段


<?phpnamespace app\admin\controller;use app\BaseController;use app\admin\model\Category as CategoryModel;class Category extends BaseController{    /**     * /category/getCateXmTree     */    public function getCateXmTree()    {        $data = CategoryModel::field('id,pid,name')            ->order('sort desc')            ->select();        $data = $this->_sort($data);//对无限级分类重新排序        dump($data);    }    /**     * 无限级分类递归排序     */    private function _sort($data, $pid = 0, $level = 0)    {        static $arr;        foreach ($data as $v) {            if ($v['pid'] == $pid) {                $v->level = $level;                $arr[] = $v->toArray();                $this->_sort($data, $v->id, $level + 1);            }        }        return $arr;    }}

3. 其他写法


/** * 无限级分类排序 */private function getTree($array, $pid = 0, $level = 0){    // 声明静态数组,避免递归调用时,多次声明导致数组覆盖    static $list = [];    foreach ($array as $key => $value) {        //第一次遍历,找到父节点为根节点的节点 也就是pid=0的节点        if ($value['pid'] == $pid) {            //父节点为根节点的节点,级别为0,也就是第一级            $value['level'] = $level;            //把数组放到list中            $list[] = $value;            //把这个节点从数组中移除,减少后续递归消耗            unset($array[$key]);            //开始递归,查找父ID为该节点ID的节点,级别则为原级别+1            $this->getTree($array, $value['id'], $level+1);        }    }    return $list;}
更新于:2个月前
赞一波!3

文章评论

评论问答