今天有网友出了道题:

给出如下的父子结构(你可以用你所用语言的类似结构来描述,第一列是父,第二列是子),将其梳理成类似如图的层次父子结构。
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 实现的更多相关文章

  1. PHP无限级分类的实现(不使用递归)

    无限级分类在开发中经常使用,例如:部门结构.文章分类.无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式: 查找分类A下面所有分类包含的文章. 1.实现原理 在 ...

  2. (实用篇)PHP递归实现无限级分类

    在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 在一些复杂的系统中,要求对信 ...

  3. php利用递归函数实现无限级分类

    相信很多学php的很多小伙伴都会尝试做一个网上商城作为提升自己技术的一种途径.各种对商品分类,商品名之类的操作应该是得心应手,那么就可以尝试下无限级分类列表的制作了. 什么是无限级分类? 无限级分类是 ...

  4. PHP+MySQL无限级分类(非递归)

    要实现无限级分类,递归一般是第一个也是最容易想到的,但是递归一般被认为占用资源的方法,所以很多系统是不考虑使用递归的 本文还是通过数据库的设计,用一句sql语句实现 数据库字段大概如下: 字段 说明 ...

  5. PHP无限级分类-递归(不推荐)

    [http://www.helloweba.com/view-blog-204.html] 在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢? ...

  6. PHP无限级分类生成树实例代码

    分享一例php无限级分类生成树的代码,学习下php无限级分类的实现方法,有需要的朋友参考下.   一段非常精简的PHP无限极分类生成树方法,巧在引用.   例子,php实现无限级分类.   代码示例: ...

  7. php非递归无限级分类.

    项目需要.递归无限级分类效率实在太低.理了半天思路写的. 分类越多效率越高. /** * 单次循环返回无限极分类嵌套 * @param array $data 操作的数组 * @param strin ...

  8. 转:php+mysql菜单无限级分类(非递归)

    php+mysql无限级分类(非递归) 参考:http://www.chhua.com/web-note3244

  9. SQL 无限级分类语句

    原文:SQL 无限级分类语句 原表数据为: 此处用到了with关键字,在程序中也可以用递归实现,但觉得还是没有一条sql方便 with tb (ID,Name,ParentID,Sort) as( s ...

随机推荐

  1. EL操作 web 对象的常用方法

    11个常见的web对象 pageScope :获得pageContext对象中存的数据 requestScope :获得request对象中存的数据 sessionScope :获得session对象 ...

  2. java5

    1:final关键字(掌握) (1)是最终的意思,可以修饰类,方法,变量. (2)特点: A:它修饰的类,不能被继承. B:它修饰的方法,不能被重写. C:它修饰的变量,是一个常量. (3)面试相关: ...

  3. WPF三大模板简介(Z)

    WPF三大模板简介   WPF支持以下类型的模板: (1) 控件模板.控件模板可以将自定义模板应用到某一特定类型的所有控件,或是控件的某一实例.决定控件外观的是ControlTemplate,它决定了 ...

  4. 【转】B-树和B+树的应用:数据搜索和数据库索引

    B-树 1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树: ⑴树中每个结点至多有m 棵子树: ⑵若根结点不是叶子 ...

  5. C# 显示问题

  6. sqlserver 分离和附加

    1.何为数据库分离和附加 数据库分离: 分离数据库就是将某个数据库(如student_Mis)从SQL Server数据库列表中删除,使其不再被SQL Server管理和使用,但该数据库的文件(.MD ...

  7. 《C#本质论》读书笔记(15)使用查询表达式的LINQ

    15.1 查询表达式的概念 简单的查询表达式 private static void ShowContextualKeywords1() { IEnumerable<string> sel ...

  8. YII的Modules模块化

    转载来源: http://blog.csdn.net/mengxiangbaidu/article/details/7041296 http://blog.csdn.net/colzer/articl ...

  9. 简单理解Socket

    题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公司使用的一些控件的开发,浏览器兼容性搞死人:但主要是因为这段时间一直在看html5的东西,看到web socket时觉得很有 ...

  10. 无法从“char*转换为“LPCWSTR”

    解决办法: 第一种方法:工程属性->配置属性->右边 项目默认值->字符集 改为未设置 第二种:一般直接加个L在前面,当是字符串常量的时候可以这样,也可以_T(x)等   来自:软件 ...