深入浅析PHP无限极分类的案例教程_php实例

平时开发中或多或少不可避免会遇到无限极分类的问题,因为效率、逻辑等问题也一直使这类问题比较尖锐。今天我们以yii2框架为基础,栏目无限极为例,对这个问题进行一个简单的处理。

首先我们有一张栏目数据表 tree

表结构如下图(原文有图)

看上去表结构很简单。

我们插入几条测试数据

INSERT INTO `tree`
(`id`, `parent_id`, `name`)
VALUES
(1, 0, 'A'),
(2, 0, 'B'),
(3, 1, 'a'),
(4, 3, 'aa'),
(5, 2, 'b'),
(6, 4, 'aaa');

树形结构大致如下

|A
|--a
|----aa
|------aaa
|B
|--b

这也正是我们所需要的数据结构形式,下面我们来看看如何处理才能够得到所需要的结果。

我们前面也说了,以yii2为基础,因此我们的写法也按照面向对象的规则来

class tree {
//访问index查看树形结构
public function actionIndex () {
$data = self::getTree();
//为了方便测试,我们这里以json格式输出
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return $data;
}
//获取树
public static function getTree () {
//这里我们直接获取所有的数据,然后通过程序进行处理
//在无限极分类中最忌讳的是对数据库进行层层操作,也就很容易造成内存溢出
//最后电脑死机的结果
$data = static::find()->all();
return self::_generateTree($data);
}
//生成树
private static function _generateTree ($data, $pid = 0) {
$tree = [];
if ($data && is_array($data)) {
foreach($data as $v) {
if($v['parent_id'] == $pid) {
$tree[] = [
'id' => $v['id'],
'name' => $v['name'],
'parent_id' => $v['parent_id'],
'children' => self::_generateTree($data, $v['id']),
];
}
}
}
return $tree;
}
}

我们访问下tree/index看看,效果图如下

这样我们可以看到一个很清晰的树形结构图,也就是我们最终所需要的。

关于PHP无限极分类的案例教程就给大家介绍这么多,希望对大家有所帮助!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php无限极分类
php无限极分类、php 无限极分类 递归、无限极分类、thinkphp 无限极分类、laravel 无限极分类,以便于您获取更多的相关知识。

时间: 2024-09-20 04:03:11

深入浅析PHP无限极分类的案例教程_php实例的相关文章

浅析Yii2 GridView实现下拉搜索教程_php实例

废话不多说了,先给大家展示下效果图,如果大家还很满意请继续往下阅读: 具体怎么实现喃?考虑到一张数据表要下拉效果的字段可能有很多个,我们先在其model中实现一个方法方便后续操作 /** * 下拉筛选 * @column string 字段 * @value mix 字段对应的值,不指定则返回字段数组 * @return mix 返回某个值或者数组 */ public static function dropDown ($column, $value = null) { $dropDownLis

PHP实现无限极分类

利用两个for循环实现无限级分类 表: 字段名 字段类型 备注 默认值 id int 主键 auto-increment   name varchar 分类名称   pid int 父类id 0 顶级分类的 pid 默认就是0了.当我们想取出某个分类的子分类树的时候,基本思路就是递归,当然,出于效率问题不建议每次递归都查询数据库,通常的做法是先将所有分类取出来,数据保存到PHP数组里,再进行处理,最后还可以将结果缓存起来以提高下次请求的效率. 先来构建一个原始数组,这个直接从数据库中查询出来就行

实现php无限极分类的方法

今天写了下无限极分类 下面就把代码贴上来了 写的不怎么样. method of classify one <?php /* reader: 这是自己写的无限极分类实现方法 里面的编辑方法只是对分类名进行了编辑 没有进行移动操作 小弟能力有限忘大家多多包涵啊 第一种方法: CREATE TABLE `types` ( `type_id` int(11) NOT NULL AUTO_INCREMENT, `type_name` varchar(20) NOT NULL, `type_p_id` va

PHP超牛逼无限极分类生成树方法

  这篇文章主要介绍了PHP超牛逼无限极分类生成树方法,本文巧用PHP中的引用实现树的生成方法,比递归方法高端多了,需要的朋友可以参考下 你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了. 这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了. 代码如下: function generateTree($items){ $tree = array(); foreach($items as $item){ if(isset($

PHP实现无限极分类图文教程_php实例

一般来说实现无限极分类都是使用递归或者迭代的方式,小伙伴们看下本文的实现方式吧. 1,数据库设计: 2,代码: 复制代码 代码如下: /**  * @author koma  * @todo   PHP无限极分类  */ $cn = mysql_connect('localhost', 'root', '') or die(mysql_error()); mysql_select_db('t', $cn) or die(mysql_error()); mysql_query('set names

php无限极分类递归排序实现方法_php技巧

本文实例讲述了php无限极分类递归排序实现方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: function order ($array,$pid=0){     $arr = array();             foreach($array as $v){         if($v['pid']==$pid){             $arr[] = $v;             $arr = array_merge($arr,order($array,$v['

sqlserver实现树形结构递归查询(无限极分类)

SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 百度百科 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它.每个CTE仅被定义一次(但在其作用域内可以被引用任意次),并且在该查询生存期间将一直生存.可以使用CTE来执行递归操作.创建的语法是: with <name of you cte>(<column names>) as( <actual query> ) select * from

查询-mysql无限极分类排序问题

问题描述 mysql无限极分类排序问题 表是这样设计的 2,4,5字段请无视 现在要查询出来这样格式的数据 一级分类 二级分类A 三级分类A 三级分类B 二级分类B 三级分类A 三级分类B 我使用的sql为 select * from vn_erp_healthprice order by sorts sorts字段为varchar类型 查询的结果如下 排序结果满足业务要求,但为什么1-11排在1-2前面 还有 根据字符串排序这是个什么原理来着 好久没用过这种分类了 一时想不起来了 求大神赐教

php实现smarty模板无限极分类的方法_php实例

本文实例讲述了php实现smarty模板无限极分类的方法.分享给大家供大家参考,具体如下: <?php $conn = mysql_connect("localhost","admin","admin"); mysql_select_db("people_shop",$conn); mysql_query("SET NAMES 'UTF-8'"); $class_arr=array(); $sql =