对无限级分类数据进行重新排序(非树形结构)
2024-08-29
17
无限级分类查询有很多方式。本文记录的方式是先将所有数据查出来,再使用递归对数据进行排序,并附加层级字段(level)。此方式仅仅对无限级的数据进行排序,并没有将子级内容放入父级。
1. 先看效果图
对无限级分类进行排序,并附加层级字段" class="reference-link" target="_blank">2. 在 TP6.0 中使用的 对无限级分类进行排序,并附加层级字段
<?php
namespace 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. 其他写法
更新于:17天前/**
* 无限级分类排序
*/
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
相关文章
- TP6.0 使用 phpoffice/phpspreadsheet 导入数据
- uniapp 目录结构及开发规范
- navicat 数据库结构同步
- phpoffice/phpexcel 读取Excel表格数据
- phpoffice/phpexcel 导出Excel表格数据
- 修改数据 update 命令
- 删除数据 delete、truncate 命令
- apache 简介、资源网站、目录结构
- MySQL 添加数据 insert 命令及优化
- Vue 父子组件通信传值(子组件中使用父组件中的数据)
- C#中结构体和byte数组之间的转换
- 针对海量数据的存储与访问瓶颈的解决方案
- Layui 数据表格重载
- 如何快速优化几千万数据量的订单表
- 如何在 Python 中创建静态类数据和静态类方法?
- MySQL 哈希索引、空间数据索引、全文索引
- 如何在 Pandas 中创建一个空的数据帧并向其附加行和列?
- 如何在 Python 和 Node.js 之间通信 JSON 数据?
- C++数据抽象简介:实现信息隐藏和模块化设计
- 使用Python获取网页数据的简单方法
文章评论
全部评论