一道无限级分类题的 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 ...
随机推荐
- 时下手机和p2p理财的共同点
1, 雨后春笋,百家争鸣:一会听说这个又做手机了,一会听说哪哪哪又搞了个P2P. 2, 性价比高的都得靠抢:手机配置高价格低的要抢:p2p利率高时间短的要抢. 3, 竞争惨烈:手机千元机各种血拼:P2 ...
- connect 链接失败: 查找不到 signal
提示错误是: signal_index < 0 ;; ---- 故 connect返回false; 消除 connect 信号 ...
- ssh设置
方法一:在/etc/hosts.allow中添加允许ssh登陆的ip或者网段 sshd:192.168.1.2:allowsshd:192.168.1.0/24:allow在/etc/hosts.de ...
- 理解JavaScript中的作用域和上下文
JavaScript对于作用域(Scope)和上下文(Context)的实现是这门语言的一个非常独到的地方,部分归功于其独特的灵活性. 函数可以接收不同的的上下文和作用域.这些概念为JavaScrip ...
- Android笔记:通知
可以在活动里创建,也可以在广播接收器里创建,还可以在服务里创建. NotificationManager manager = (NotificationManager)getSystemService ...
- October 21st 2016 Week 43rd Friday
Life is too short for long-term grudges. 人生苦短,无暇怨恨. Don't limit yourself. You can go as far as your ...
- (转)Java中使用Jedis操作Redis
转自http://www.cnblogs.com/liuling/p/2014-4-19-04.html 使用Java操作Redis需要jedis-2.1.0.jar,下载地址:http://file ...
- iOS 状态栏隐藏显示
在 info.plist 文件中 配置 View controller-based status bar appearance 对应的值为 NO 这样可以使用 application 对象来设置 状态 ...
- windows下修复Linux引导 and linux下几个常用软件
在这里,我选择的是deepinLinux,不用说,高端大气上档次! Linux下引导修复 在win7上安装好了Linux,一不小心Linux系统启动不了 (一不小心的过程,想使用root登录图像界面, ...
- 【leetcode】Excel Sheet Column Title & Excel Sheet Column Number
题目描述: Excel Sheet Column Title Given a positive integer, return its corresponding column title as ap ...