<?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);
?>
php递归获取分类结构
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1、先把数据插入到数据库、pms_category文件 2、在Category控制层中查询、service层中写对...
- 原文转载自「刘悦的技术博客」https://v3u.cn/a_id_133 所谓的无限极分类是啥?其实简单点说就是...
- SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 百度百科公用表表达...