thinkphp中如何实现无限级分类?

一、总结

1、数据表设计+递归算法

二、php实现无限级分类实例总结

1、数据库数据如下:

2、任务需求:给一个id,求自己和所有父亲。

3、实现代码如下:thinkphp中的模型层

 <?php
namespace app\index\model;
use think\Model; class Base extends Model
{ //递归具体将数据按照从父亲到孩子开始排序
public function recursionSortModule($modules,$pid=0){
static $arr=array();
foreach ($modules as $k => $v) {
if ($v['pid']==$pid) {
$arr[]=$v;
$this->recursionSortModule($modules,$v['id']);
}
}
return $arr;
} // 将数据按照从父亲到孩子开始排序
public function sortModule(){
$modules=db('module')->select();
$sortModules=$this->recursionSortModule($modules);
return $sortModules;
} // 需求:根据一个moduleid,获取它自己以及他的所有父亲
public function getAllParents($id){
//1、将数据按照从父亲到孩子开始排序
$sortModules=$this->sortModule();
//2、从排序好的数组由下往上取出自己以及它的所有父亲
$ans=array();
foreach (array_reverse($sortModules) as $key => $value) {
if ((int)$value['id']==(int)$id) {
$ans[]=$value;
$id=$value['pid'];
}
}
return array_reverse($ans);
} }

4、性能分析:

其实感觉这样排序后找的效果还不如直接递归拿自己和父亲

三、测试题-简答题

1、无限分类的数据表设计有哪些核心字段?

解答:核心字段:id,pid。

2、无限分类的本质是哪种数据结构?

解答:树,树的核心操作就是递归,所以无限分类一般都是递归。

3、无限分类一般是用哪种算法来实现的?

解答:递归,因为无限分类的本质是树,而树的核心算法就是递归,所以无限分类一般都是递归算法。当然栈也可以。

4、无限分类算法的起始是什么?

解答:依次找pid为0的数据。

5、无限分类递归算法实现中递归的参数是什么?

解答:数组数据和pid,如果数据表里面没有记录level字段,如果需要在递归中求level字段,参数可以加上level。

6、无限分类递归的排序算法是什么?

解答:依次找pid为0的数据,对每个pid为0的数据,递归找他们的所有孩子。

7、静态数组的作用是什么?

解答:保证数组数据独一份,即使在递归中也保证数组数据是全局的,是一份的。

8、php中的静态数组如何实现?

解答:static $arr=array();

9、如何实现foreach的逆序输出?

解答:用array_reverse(), foreach (array_reverse($sortModules) as $key => $value)。

thinkphp中如何实现无限级分类?的更多相关文章

  1. ThinkPHP自动填充实现无限级分类的方法

    这篇文章主要介绍了ThinkPHP自动填充实现无限级分类的方法,是ThinkPHP项目开发中非常实用的一个技巧,需要的朋友可以参考下   本文实例展示了ThinkPHP自动填充实现无限级分类的方法,是 ...

  2. Thinkphp的list_to_tree 实现无限级分类列出全部节点

    list_to_tree 使用起来十分方便,具体可查看手冊.由于我在用的时候须要同一时候列出全部节点,所以写了一个递归函数,拿出来供大家參考. public function index(){ Loa ...

  3. thinkphp框架中使用递归实现无限级分类

    无限级分类在我们开发中显得举足轻重,会经常被人问到,而一般会用递归的方法来实现,但是递归又会难倒一批人.今天博主分享的这个稍微有点基础的phper都能学会,希望大家能喜欢. 一.先建立对应的数据库和表 ...

  4. thinkphp实现无限级分类

    普通的方法(采用for和foreach) //显示 foreach($data as $k=>$v){ //str_repeat()函数用于把字符串重复指定的次数 $data[$k]['titl ...

  5. ThinkPHP无限级分类

    <?php // +---------------------------------------------------------------------- // | ThinkPHP [ ...

  6. php无限级分类实战——评论及回复功能

    经常在各大论坛或新闻板块详情页面下边看到评论功能,当然不单单是直接发表评论内容那么简单,可以对别人的评论进行回复,别人又可以对你的回复再次评论或回复,如此反复,理论上可以说是没有休止,从技术角度分析很 ...

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

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

  8. ThinkPHP中疑难笔记

    不但要记住核心的东西, 还要记住 相关的 东西: 如php cli的版本是 5.6.14 bulit: sep 30, 2015 tp中, 通常说的系统就是框架; 项目就是 "应用程序&qu ...

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

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

随机推荐

  1. WPF MVVM示例自定义模板数据绑定

    在触摸屏设备上.由于列表是的信息展示不是非常直观和便捷操作. 所以也就出现了很多用面板控件:类似win10的Metro风格, 所以抽空做了一个WPF面板控件. 话不多上 , 先上一个示例图. 为了便于 ...

  2. [CSS] Build a Fluid Loading Animation in CSS

    In this lesson, we will create a fluid loading animation using Animations and Transformations in CSS ...

  3. CSU1660: K-Cycle

    Description A simple cycle is a closed simple path, with no other repeated vertices or edges other t ...

  4. 本地 oracle 安装文件夹满触发 ORA-7445 [_memmove()+64] 导致Instance Crashed 的事故

    近期处理了一个问题,原因是因为命中ORA-600 [kole_t2u], [34] - description, bugs 导致 在udump 文件夹下大量转储 出cdmp 文件, 然后这些 cdmp ...

  5. Javascript和jquery事件--键盘事件KeyboardEvent

    Js和jq事件—键盘事件KeyboardEvent 键盘事件keydown,keypress和keyup,还需要涉及到一个文本事件textInput. keydown,keypress和keyup事件 ...

  6. js数组遍历和对象遍历小结

    数组的遍历 for循环 for(var j = 0,len = arr.length; j < len; j++){ console.log(arr[j]); } forEach,性能比for还 ...

  7. 洛谷 P2790 ccj与zrz之积木问题

    P2790 ccj与zrz之积木问题 题目背景 ccj和zrz无聊到了玩起了搭积木...(本题选自uva101,翻译来自<算法竞赛入门经典2>) 题目描述 从左到右有n个木块,编号从0到n ...

  8. Day2:列表、元组

    一.列表 1.定义与访问元素(按索引) #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan list_a = [&quo ...

  9. Loadrunner--负载生成器

    对场景进行设计后,接着需要对负载生成器进行管理和设置.Load Generator是运行脚本的负载引擎,在默认情况下使用本地的负载生成器来运行脚本,但是模拟用户行为也需要消耗一定的系统资源,所以在一台 ...

  10. equals、HashCode与实体类的设计

    equals和HashCode都是用来去重的,即判断两个对象是否相等.如果是String类则我们直接用.equals()判断,如果是我们自己定义的类,需要有自己的判断方法,重写equals,如果是集合 ...