PHP无限极分类实现
简单版的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无限极分类实现的更多相关文章
- php无限极分类以及递归(thinkphp)
php无限极分类: 无限极分类重点在于表的设计: 1在model中: class CatModel extends Model{ protected $cat = array(); public fu ...
- js实现无限极分类
转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来 ...
- C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制
在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...
- PHP无限极分类
当你学习php无限极分类的时候,大家都觉得一个字“难”我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究. 到网上一搜php无限极分类,很多,但好多都是一个,并且,写的很乱, ...
- PHP无限极分类,多种方法|很简单,这里说的很详细,其它地方说的很不好懂
当你学习php无限极分类的时候,大家都觉得一个字"难"我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究. 到网上一搜php无限极分类,很多,但好多都是一 ...
- C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现
今天做一个管理后台菜单,想着要用无限极分类,记得园子里还是什么地方见过这种写法,可今天找了半天也没找到,没办法静下心来自己写了: 首先创建节点类(我给它取名:AdminUserTree): /// & ...
- 谈一次php无限极分类的案例
作者:白狼 出处:http://www.manks.top/php_tree_deep.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追 ...
- PHP无限极分类生成树方法,无限分级
你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了.这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了. function g ...
- php之无限极分类
首先建立分类信息表: CREATE TABLE IF NOT EXISTS `category` ( `categoryId` smallint(5) unsigned NOT NULL AUTO_I ...
随机推荐
- css的6中居中的方式
请先看blog:http://blog.csdn.net/wolinxuebin/article/details/7615098
- 深入理解C#泛型
前面两篇文章介绍了C#泛型的基本知识和特性,下面我们看看泛型是怎么工作的,了解一下泛型内部机制. 泛型内部机制 泛型拥有类型参数,通过类型参数可以提供"参数化"的类型,事实上,泛型 ...
- WCF入门(22)
前言 本还想写一集WCF入门教程的,心情实在不好,明天又还有面试,改天再写吧. 说一下今天遇到的入职坑.面试能坑,上班能坑,完全没想到入职也能坑.切身经历. 今年10月份想换工作,更新了一下简历,接到 ...
- Flex ObjectHandles 构建绘图程序!
模型 主画布组件:com/components/graph/GraphContainer.mxml <?xml version="1.0" encoding="ut ...
- 每天一个linux命令(53):wget命令
Linux系统中的wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器.wget支持HTTP,HTTPS和FTP协 ...
- Xamarin.Forms入门学习路线
Xamarin 介绍 Xamarin是一套跨平台解决方案,目的是使用C#语言创造原生的iOS,Android,Mac和Windows应用. Xamarin的三个优势: Xamarin App拥有原生A ...
- OC基础--self关键字&super关键字
PS:OC中的self关键字可以与C#中的this关键字区分记忆,虽然区别还是很大的. OC中的super关键字指的是父类指针 一.self关键字必须了解的知识: 1.使用场合:只能用在方法中(对象方 ...
- 图解Android - Android GUI 系统 (5) - Android的Event Input System
Android的用户输入处理 Android的用户输入系统获取用户按键(或模拟按键)输入,分发给特定的模块(Framework或应用程序)进行处理,它涉及到以下一些模块: Input Reader: ...
- 用freemarker生产静态页面
FreeMarker概述 * FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 * Template + data model = output ...
- 41.Android之图片放大缩小学习
生活中经常会用到图片放大和缩小,今天简单学习下. 思路:1.添加一个操作图片放大和缩小类; 2. 布局文件中引用这个自定义控件; 3. 主Activity一些修改. 代码如下: 增加图片操作类: ...