一道无限级分类题的 PHP 实现
今天有网友出了道题:
给出如下的父子结构(你可以用你所用语言的类似结构来描述,第一列是父,第二列是子),将其梳理成类似如图的层次父子结构。
origin = [('A112', 'A1122'),
('A', 'A1'),
('A', 'A2'),
('A1', 'A11'),
('A2', 'A21'),
('A2', 'A22'),
('A', 'A3'),
('A22', 'A221'),
('A11', 'A111'),
('A21', 'A211'),
('A11', 'A112'),
('A21', 'A212'),
('A11', 'A113'),
('A112', 'A1121'),
('A3', 'A31'),
('A31', 'A311'),
('A22', 'A222'),
('A31', 'A312'),
('A31', 'A313'),
('A311', 'A3111'),
('A312', 'A3121'),
('A3111', 'A31111')]
输出结果:

看了一下是无限级分类的原理,可以用递归来实现:
<?php
$origin = [
['A112', 'A1122'],
['A', 'A1'],
['A', 'A2'],
['A1', 'A11'],
['A2', 'A21'],
['A2', 'A22'],
['A', 'A3'],
['A22', 'A221'],
['A11', 'A111'],
['A21', 'A211'],
['A11', 'A112'],
['A21', 'A212'],
['A11', 'A113'],
['A112', 'A1121'],
['A3', 'A31'],
['A31', 'A311'],
['A22', 'A222'],
['A31', 'A312'],
['A31', 'A313'],
['A311', 'A3111'],
['A312', 'A3121'],
['A3111', 'A31111']
]; // 根据父id找出子信息
function level($cate, $html = '-', $pid = '0', $level = 0) {
$arr = array();
foreach($cate as $val) {
if($val[0] == $pid) {
$val['level'] = $level + 1;
$val['html'] = str_repeat($html, $level);
$arr[] = $val;
$arr = array_merge($arr, level($cate, $html, $val[1], $level + 1));
}
}
return $arr;
} // 构建顶级分类
$pids = [];
$cids = [];
foreach($origin as $val) {
$pids[] = $val[0];
$cids[] = $val[1];
}
$top = array_flip(array_diff($pids, $cids));
foreach($top as $key => $val) {
$origin[] = ['0', $key];
} $res = level($origin, ' ');
foreach($res as $k => $v) {
echo $v['html'],$v[1],PHP_EOL;
}
输出:

一道无限级分类题的 PHP 实现的更多相关文章
- PHP无限级分类的实现(不使用递归)
无限级分类在开发中经常使用,例如:部门结构.文章分类.无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式: 查找分类A下面所有分类包含的文章. 1.实现原理 在 ...
- (实用篇)PHP递归实现无限级分类
在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 在一些复杂的系统中,要求对信 ...
- php利用递归函数实现无限级分类
相信很多学php的很多小伙伴都会尝试做一个网上商城作为提升自己技术的一种途径.各种对商品分类,商品名之类的操作应该是得心应手,那么就可以尝试下无限级分类列表的制作了. 什么是无限级分类? 无限级分类是 ...
- PHP+MySQL无限级分类(非递归)
要实现无限级分类,递归一般是第一个也是最容易想到的,但是递归一般被认为占用资源的方法,所以很多系统是不考虑使用递归的 本文还是通过数据库的设计,用一句sql语句实现 数据库字段大概如下: 字段 说明 ...
- PHP无限级分类-递归(不推荐)
[http://www.helloweba.com/view-blog-204.html] 在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢? ...
- PHP无限级分类生成树实例代码
分享一例php无限级分类生成树的代码,学习下php无限级分类的实现方法,有需要的朋友参考下. 一段非常精简的PHP无限极分类生成树方法,巧在引用. 例子,php实现无限级分类. 代码示例: ...
- php非递归无限级分类.
项目需要.递归无限级分类效率实在太低.理了半天思路写的. 分类越多效率越高. /** * 单次循环返回无限极分类嵌套 * @param array $data 操作的数组 * @param strin ...
- 转:php+mysql菜单无限级分类(非递归)
php+mysql无限级分类(非递归) 参考:http://www.chhua.com/web-note3244
- SQL 无限级分类语句
原文:SQL 无限级分类语句 原表数据为: 此处用到了with关键字,在程序中也可以用递归实现,但觉得还是没有一条sql方便 with tb (ID,Name,ParentID,Sort) as( s ...
随机推荐
- 超级详细Tcpdump 的用法
1.抓取回环网口的包:tcpdump -i lo 2.防止包截断:tcpdump -s0 3.以数字显示主机及端口:tcpdump -n 第一种是关于类型的关键字,主要包括host,net,port, ...
- js框架设计1.4类型判断
这篇司徒大神介绍了很多js的 不靠谱类型判断.篇幅也是第一篇中最常的 ,经阅读后,以后一定要用框架的自带的类型判断,万万不可随便乱用js原生判断.
- How to Install The Alpha Control Packages.
Uninstalling previous version of the package If you have a previous version of the package already i ...
- Win10 UI介绍之Titlebar
活动状态 非活动状态 var titleBar = ApplicationView.GetForCurrentView().TitleBar; titleBar.BackgroundColor = C ...
- 论SOA架构的几种主要开发方式
转: http://blog.csdn.net/chenleixing/article/details/44926955 面向服务架构soa以其独特的优势越来越受到企业的重视,它可以根据需求通过网络 ...
- Linux 第06天
Linux 第06天 1.SAMBA服务器————(linux和windows的文件共享) 1.1 安装 yum install samba -yum 1.2 配置文件 /etc/samba/smb. ...
- SQL性能学习汇总 00
.在一条语句中不要重复使用相同的函数 .尽可能在存储过程中使用临时变量和临时表 如 IF (Object_ID('tempdb..#T') IS NOT NULL) DROP TABLE #T SEL ...
- htaccess分布式配置文件常用写法
htaccess 写法 Apache中的.htaccess(或者”分布式配置”了针对目录改变配置的方法,即,在特定的文档目录中放置包含或多个指令的,以作用于此目录及其子目录.作为,所能的命令受到限制. ...
- LinQ和ADO.Net增删改查 备忘
是否些倦了 SqlConnection conn=new SqlConnection();一系列繁冗的代码? 来试试Linq吧 查: using System.Data.SqlClient; name ...
- Dijkstra算法初步 - 迷宫问题
你来到一个迷宫前.该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间,你就可以得到这个分数.还有若干双向道路连结这些房间,你沿着这些道路从一个房间走到另外一个房间需要一些时间.游戏规定了 ...