thinkphp中如何实现无限级分类?
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中如何实现无限级分类?的更多相关文章
- ThinkPHP自动填充实现无限级分类的方法
这篇文章主要介绍了ThinkPHP自动填充实现无限级分类的方法,是ThinkPHP项目开发中非常实用的一个技巧,需要的朋友可以参考下 本文实例展示了ThinkPHP自动填充实现无限级分类的方法,是 ...
- Thinkphp的list_to_tree 实现无限级分类列出全部节点
list_to_tree 使用起来十分方便,具体可查看手冊.由于我在用的时候须要同一时候列出全部节点,所以写了一个递归函数,拿出来供大家參考. public function index(){ Loa ...
- thinkphp框架中使用递归实现无限级分类
无限级分类在我们开发中显得举足轻重,会经常被人问到,而一般会用递归的方法来实现,但是递归又会难倒一批人.今天博主分享的这个稍微有点基础的phper都能学会,希望大家能喜欢. 一.先建立对应的数据库和表 ...
- thinkphp实现无限级分类
普通的方法(采用for和foreach) //显示 foreach($data as $k=>$v){ //str_repeat()函数用于把字符串重复指定的次数 $data[$k]['titl ...
- ThinkPHP无限级分类
<?php // +---------------------------------------------------------------------- // | ThinkPHP [ ...
- php无限级分类实战——评论及回复功能
经常在各大论坛或新闻板块详情页面下边看到评论功能,当然不单单是直接发表评论内容那么简单,可以对别人的评论进行回复,别人又可以对你的回复再次评论或回复,如此反复,理论上可以说是没有休止,从技术角度分析很 ...
- PHP无限级分类的实现(不使用递归)
无限级分类在开发中经常使用,例如:部门结构.文章分类.无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式: 查找分类A下面所有分类包含的文章. 1.实现原理 在 ...
- ThinkPHP中疑难笔记
不但要记住核心的东西, 还要记住 相关的 东西: 如php cli的版本是 5.6.14 bulit: sep 30, 2015 tp中, 通常说的系统就是框架; 项目就是 "应用程序&qu ...
- (实用篇)PHP递归实现无限级分类
在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 在一些复杂的系统中,要求对信 ...
随机推荐
- django 简单会议室预约(3)
URL配置: 今天配置一下URL,打开urls.py配置如下: from django.conf.urls import patterns, include, url from djapp impor ...
- RFID的工作流程
工作流程 1.阅读器通过发射天线发送一定频率的射频信号, 2.当射频卡进入发射天线工作区域时产生感应电流,射频卡获得能量被激活: 3.射频卡将自身编码等信息通过卡内置发送天线发送出去 4.系统接收天线 ...
- 洛谷 P1571 眼红的Medusa
P1571 眼红的Medusa 题目描述 虽然Miss Medusa到了北京,领了科技创新奖,但是他还是觉得不满意.原因是,他发现很多人都和他一样获了科技创新奖,特别是其中的某些人,还获得了另一个奖项 ...
- .net core 分布式性能计数器的实现
1.特别鸣谢张善友老师的指点; 2.分布式性能计数器链接地址:https://mp.weixin.qq.com/s/hPV_bNZD4XmjP0QTE54pWA
- 5.Zookeeper的两种安装和配置(Windows):单机模式与集群模式
转自:https://blog.csdn.net/a906998248/article/details/50815031
- 常用加密算法的Java实现(一)
常用加密算法的Java实现(一) ——单向加密算法MD5和SHA 摘自:http://www.blogjava.net/amigoxie/archive/2014/06/01/414299.html ...
- 1.3 Python基础知识 - 用户交互及传递参数
一.用户交互 用户交互方面,每种开发语言都有不同的方式,例如shell语言用的是,“read -p "What is your name ? " ”.python中是什么样子的呢 ...
- Altium Designer布局移动原件的问题
- SQL Server2008 Hierarchyid数据类型
以往我们在关系数据库中建立树状结构的时候,通常使用ID+ParentID来实现两条 纪录间的父子关系.但这种方式只能标示其相对位置.解决这类问题在SqlServer2005出现之前通常是采用游标来操作 ...
- 就目前市面上的面试整理来说,最全的BAT大厂面试题整理在这
原标题:就目前市面上的面试整理来说,最全的BAT大厂面试题整理在这 又到了面试求职高峰期,最近有很多网友都在求大厂面试题.正好我之前电脑里面有这方面的整理,于是就发上来分享给大家. 这些题目是网友去百 ...