zoukankan      html  css  js  c++  java
  • thinkphp中如何实现无限级分类?

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

    一、总结

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

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

    1、数据库数据如下:

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

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

     1 <?php
     2 namespace appindexmodel;
     3 use thinkModel;
     4 
     5 class Base extends Model
     6 {
     7 
     8     //递归具体将数据按照从父亲到孩子开始排序
     9     public function recursionSortModule($modules,$pid=0){
    10         static $arr=array();
    11         foreach ($modules as $k => $v) {
    12             if ($v['pid']==$pid) {
    13                 $arr[]=$v;
    14                 $this->recursionSortModule($modules,$v['id']);
    15             }
    16         }
    17         return $arr;
    18     }
    19 
    20     // 将数据按照从父亲到孩子开始排序
    21     public function sortModule(){
    22         $modules=db('module')->select();
    23         $sortModules=$this->recursionSortModule($modules);
    24         return $sortModules;
    25     }
    26 
    27     // 需求:根据一个moduleid,获取它自己以及他的所有父亲
    28     public function getAllParents($id){
    29         //1、将数据按照从父亲到孩子开始排序
    30         $sortModules=$this->sortModule();
    31         //2、从排序好的数组由下往上取出自己以及它的所有父亲
    32         $ans=array();
    33         foreach (array_reverse($sortModules) as $key => $value) {
    34             if ((int)$value['id']==(int)$id) {
    35                 $ans[]=$value;
    36                 $id=$value['pid'];
    37             }
    38         }
    39         return array_reverse($ans);
    40     }
    41 
    42 }

    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)。

  • 相关阅读:
    如何在ONENET云端搭建IOT平台
    01_接口测试介绍
    10_fiddler_待整理
    09_fiddler_慢网络测试(限制网速)
    08_Fiddler_打断点(bpu)
    07_Fiddler_post提交到主体的四种参数形式
    06_Fiddler_get请求(url详解)
    05_Fiddler的Script 脚本用法
    04_Fiddler_Composer创建和发送HTTP Request
    03_Fiddler抓包的捕获设置
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9103126.html
Copyright © 2011-2022 走看看