简单版的PHP生成无限极分类代码。其中包括了数据库设计、以及输出分类HTML代码。

SQL代码

CREATE TABLE `district` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`pid` int(10) unsigned NOT NULL,
`name` varchar(32) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 # 添加一些测试数据
INSERT INTO `district` (`id`, `pid`, `name`) VALUES
(1, 0, '中国'),
(2, 0, '美国'),
(3, 0, '日本'),
(4, 1, '北京'),
(5, 1, '上海'),
(6, 1, '广州'),
(7, 2, '华盛顿'),
(8, 2, '纽约'),
(9, 3, '东京'),
(10, 3, '广岛'),
(11, 4, '朝阳区');

PHP代码

header('Content-type:text/html;charset=utf-8');

$mysql = new mysqli('localhost', 'root', 'root', 'test');
$mysql->query('SET NAMES UTF8');
$result = $mysql->query('SELECT * FROM `district`'); while ($row = $result->fetch_assoc()) {
$district[$row['id']] = array('id' => $row['id'], 'pid' => $row['pid'], 'name' => $row['name']);
} // $district结构如下所示:
$items = array(
1 => array('id' => 1, 'pid' => 0, 'name' => '中国'),
2 => array('id' => 2, 'pid' => 0, 'name' => '日本'),
3 => array('id' => 3, 'pid' => 0, 'name' => '美国'),
4 => array('id' => 1, 'pid' => 1, 'name' => '北京'),
// .......
// .......
11 => array('id' => 11, 'pid' => '4', 'name' => '朝阳区')
); /**
* @方法一:将数据格式转换成树形结构数组
* @param array $items 要进行转换的数组
* return array $items 转换完成的数组
*/
function arrayToTree(Array $items) {
foreach ($items as $item) {
$items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];
}
return isset($items[0]['son']) ? $items[0]['son'] : array();
} /**
* @方法二:将数据格式转换成树形结构数组
* @param array $items 要进行转换的数组
* return array $items 转换完成的数组
*/
function arrayToTree2(Array $items) {
$tree = array();
foreach ($items as $item)
if (isset($items[$item['pid']])) {
$items[$item['pid']]['son'][] = &$items[$item['id']];
} else {
$tree[] = &$items[$item['id']];
}
return $tree;
} /**
* 将树形结构数组输出
* @param array $items 要输出的数组
* @param number $deep 顶级父节点id
*/
function exportTree($items, $deep = 0){
foreach ($items as $item) {
printf("%s%s", str_repeat('——', $deep), $item['name']);
if (!empty($item['son'])) {
exportTree($item['son'], $deep + 1);
}
}
}

测试

// 将数组转换成树形结构格式
$district = arrayToTree2($district);
// 输出树形结构图
exportTree($district); // 结果: 中国
——北京
————朝阳区
——上海
——广州
美国
——华盛顿
——纽约
日本
——东京
——广岛

PHP无限极分类实现的更多相关文章

  1. php无限极分类以及递归(thinkphp)

    php无限极分类: 无限极分类重点在于表的设计: 1在model中: class CatModel extends Model{ protected $cat = array(); public fu ...

  2. js实现无限极分类

    转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来 ...

  3. C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制

    在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...

  4. PHP无限极分类

      当你学习php无限极分类的时候,大家都觉得一个字“难”我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究. 到网上一搜php无限极分类,很多,但好多都是一个,并且,写的很乱, ...

  5. PHP无限极分类,多种方法|很简单,这里说的很详细,其它地方说的很不好懂

    当你学习php无限极分类的时候,大家都觉得一个字"难"我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究.   到网上一搜php无限极分类,很多,但好多都是一 ...

  6. C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现

    今天做一个管理后台菜单,想着要用无限极分类,记得园子里还是什么地方见过这种写法,可今天找了半天也没找到,没办法静下心来自己写了: 首先创建节点类(我给它取名:AdminUserTree): /// & ...

  7. 谈一次php无限极分类的案例

    作者:白狼 出处:http://www.manks.top/php_tree_deep.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追 ...

  8. PHP无限极分类生成树方法,无限分级

    你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了.这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了. function g ...

  9. php之无限极分类

    首先建立分类信息表: CREATE TABLE IF NOT EXISTS `category` ( `categoryId` smallint(5) unsigned NOT NULL AUTO_I ...

随机推荐

  1. 论Visual Studio和.NET Framework

    今天在工作的时候听到一席谈话感觉有点不可思议,微软真的是把开发人员惯的有点傻了,微软流水线式的产品让很多开发者认定了"唯一",这当然也说明了微软的成功,不扯太多题外话,今天只是简单 ...

  2. JavaScript、jQuery、AJAX、JSON 解释

  3. ajax使用post提交中文

    Ajax使用POST提交中文乱码问题 前段时间写JSP,使用AJAX以POST方式提交数据,如果是中文字符提交就会乱码,后来写ASP时用到AJAX以POST方式提交数据,中文一样是乱码.搜索一下相关资 ...

  4. 【BZOJ 3674】可持久化并查集加强版&【BZOJ 3673】可持久化并查集 by zky 用可持久化线段树破之

    最后还是去掉异或顺手A了3673,,, 并查集其实就是fa数组,我们只需要维护这个fa数组,用可持久化线段树就行啦 1:判断是否属于同一集合,我加了路径压缩. 2:直接把跟的值指向root[k]的值破 ...

  5. Java设计模式-责任链模式(Chain of Responsibility)

    接下来我们将要谈谈责任链模式,有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求.但是发出者并不清楚到底最终那个对象会处理该请求,所以,责任 ...

  6. 【CodeForces 620D】Professor GukiZ and Two Arrays

    题 题意 两个数列,一个有n个数,另一个有m个数,让你最多交换两次两个数列的数,使得两个数列和的差的绝对值最小,求这个差的绝对值.最少交换次数.交换数对 分析 交换0次.1次可得到的最小的差可以枚举出 ...

  7. POJ1011 Sticks

    Description George took sticks of the same length and cut them randomly until all parts became at mo ...

  8. Python input()和raw_input()的区别

    当输入为数字的时候,input()获得的是数字,而后者获得的是str,可以用int(raw_input())来转换. i = input() print i+1 j = raw_input() pri ...

  9. redis.conf

    redis示例配置文件 分类: redis2013-10-22 16:39 427人阅读 评论(0) 收藏 举报 转载自https://raw.github.com/antirez/redis/2.6 ...

  10. Machine Learning Methods: Decision trees and forests

    Machine Learning Methods: Decision trees and forests This post contains our crib notes on the basics ...