美文网首页
php递归获取分类结构

php递归获取分类结构

作者: Mracale | 来源:发表于2025-01-16 11:22 被阅读0次
<?php
error_reporting(E_ALL);
/**
 * 表结构信息
 * CREATE TABLE `crm_admin_structure` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(200) NOT NULL DEFAULT '',
  `pid` int(11) DEFAULT '0',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=68 DEFAULT CHARSET=utf8 COMMENT='部门表';
*/
// 数据库连接参数
$servername = "127.0.0.1";
$username = "xxx";
$password = "xx";
$dbname = "xx";
/**
 * 递归获取结构树
 * @param  array $data  数据源
 * @param  integer $pid 父类id
 * @param  integer $level 深度
 * @return array 组装好的树
 */
function get_tree($data, $pid = 0, $level = 0) {
    static $tree = array();
    foreach ($data as $key => $row) {
        if ($row['pid'] == $pid) {
            $row['level'] = $level;
            $tree[] = $row;
            unset($data[$key]); //进入树结构后,接下里要查的就只是它的子类了,所以从$data中删除,减少后面查询次数
            get_tree($data, $row['id'], $level + 1);
        }
    }
    return $tree;
}

/**
 * 字符转换(utf-8 => GBK)
 */
function utfToGbk($data)
{
    return iconv('utf-8', 'GBK', $data);
}
//导出csv文件信息
function exportCsv($data){
    // 文件名,这里都要将utf-8编码转为gbk,要不可能出现乱码现象
    $filename = utfToGbk('导出csv文件.csv');

    // 拼接文件信息,这里注意两点
    // 1、字段与字段之间用逗号分隔开
    // 2、行与行之间需要换行符
    $fileData = utfToGbk('id, name, pid ,备注') . "\n";
    foreach ($data as $value) {
        $str = str_repeat("->", $value['level']);
        $temp = $value['id'] . ',' .$str.$value['name'] . ',' .
                $value['pid'];
        $fileData .= utfToGbk($temp) . "\n";
    }

    // 头信息设置
    header("Content-type:text/csv");
    header("Content-Disposition:attachment;filename=" . $filename);
    header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
    header('Expires:0');
    header('Pragma:public');
    echo $fileData;
    exit;
}

    // 创建连接
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("连接失败: " . $conn->connect_error);
    } 
     
    $sql = "SELECT id, name, pid FROM crm_admin_structure";
    $ret = $conn->query($sql);
    // var_dump($ret);die;
    if ($ret->num_rows > 0) {
    // 输出数据
        while($vv = $ret->fetch_assoc()) {
            $result[] = $vv;
        }
    } else {
        echo "0 结果";
    }
    // var_dump($result);die;


    $nestedTree = get_tree($result);

    exportCsv($nestedTree);

?>

相关文章

  • golang 无限级分类

    分类结构 分类列表如下 递归实现

  • 递归函数

    将分类递归,上下级排序 【PHP】 【JS】

  • PHP无限级分类(二)

    在 PHP无限级分类(一) 中,我们介绍了两种简单的无限级分类构造方法。下面介绍一种从树形结构中获取子结构的方法:...

  • php实现无限极分类

    一、两种实现php无限极分类 设置原始数据 1. 使用php递归实现php无限极分类 通过foreach循环实现无...

  • php 递归无限分类

    参考因为递归的效率相对来说比较低,所以很少使用,尤其是在查询数据库的时候对数据库的长时间占用很不合理。 但是递归遍...

  • php->无限级分类

    用php实现下面的功能,方法:数据库表的合理设计+递归 1.业务逻辑(1)表结构分类表字段:cat_id、cat_...

  • php无限极分类

    递归--无限极分类 递归--子孙树转二维数组 可以配合Nestable使用 递归--获取树所有叶子节点 结果1 结...

  • PHP递归实现无限级分类

    PHP递归实现无限级分类 在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性。那么PHP是如何...

  • 39-综合实战:一对多映射

        按照表的要求将表的结构转换为类结构,同时可以获取如下信息: 获取一个分类的完整信息; 可以根据分类获取其对...

  • springboot使用递归获取导航无限级分类 使用thymel

    springboot使用递归获取导航无限级分类,使用thymeleaf渲染导航栏,在实际项目中经常会出现三级分类或...

网友评论

      本文标题:php递归获取分类结构

      本文链接:https://www.haomeiwen.com/subject/xecnyjtx.html