• PHP无限极分类,多种方法|很简单,这里说的很详细,其它地方说的很不好懂


    当你学习php无限极分类的时候,大家都觉得一个字“难”我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究。

       到网上一搜php无限极分类,很多,但好多都是一个,并且,写的很乱,代码很多,让我们怎么学习嘛,那些都不靠谱,还是自己捣鼓捣鼓无限极分类了。

    比如一个category表:有id, name, pid, sort 就这四个简单的字段,不要太复杂了。

    id    name          pid      sort
    1     PHP           0       1
    2     Javascript       0        2
    3     MySQL          0       3
    4     PHP类          1       1
    5     smarty         1        2
    6     私有方法        4        1
    7     jQuery         2        1


    代码:category.class.php

    class Category {
          static public function sortOut($cate,$pid=0,$level=0,$html='--'){
                   $tree = array();
                   foreach($cate as $v){
                           if($v['id'] == $pid){
                                   $v['level'] = $level + 1;
                                   $v['html'] = str_repeat($html, $level);
                                   $tree[] = $v;
                                   $tree = array_merge($tree, self::sortOut($cate,$v['id'],$level+1,$html));
                           }
                   }
                   return $tree;
          }
    }


    这里的$cate是查询上面表获取的一个二维数组:这里就不写了

    下面是效果:

    id    name              pid   level     sort
    1     PHP              0      1     1
    4       --php类          1      2     1
    6       ----私有方法        4      3      1
    5       --smarty          1      2     2
    2     Javascript           0      1     2
    7       --php类          2       2     1
    3     MySQL              0      1       3



    到此,我们就实现了最简单的php无限极分类了,这个在工作中用的很多的。

    ----------------------------------------------

    好像不需要array_merge

    function tree(&$list,$pid=0,$level=0,$html='--'){
        static $tree = array();
        foreach($list as $v){
            if($v['pid'] == $pid){
                $v['sort'] = $level;
                 $v['html'] = str_repeat($html,$level);
                $tree[] = $v;
                tree($list,$v['id'],$level+1);
            } 
        }
        return $tree;
    }


    大家知道分类多了,递归效率也就低了,所以,有了下面的算法:预排序遍历树算法进行无限分类


    相关文章推荐:

        超优雅!两行代码搞定 php 无限级分类 获取顶级分类ID

    有这样一个表,id是分类的ID,name是分类名称,pid是上级分类的ID。

    现在有个分类ID,程序要找到它上级的上级的上级……分类的ID,简单说就是找出顶级分类的ID。比如“新鲜水果”的ID是13,对应父类ID是5,而5的父ID是1,1没有父类,也就是顶级分类了。

    以前年轻气盛不懂事,总想着用递归来查找,然后再将结果缓存来解决性能问题。
    后来又试过将整个表缓存起来,再递归查找。
    再后来……似乎比较少有机会遇到无限级分类……

    最近有个同事问我怎么“优雅”的解决这个问题。于是我灵机一动,就有了如下解决方案:

    <?php
    $sql = "select id, pid from tablename ";
    // 查询后 将结果处理成 如下数组格式
    $arr = [
        // id => pid
        1 => 0,
        // 省略...
        5 => 1,
        // 省略...
        13 => 5
    ];
    // 建议将这数组缓存起来
    
    $id = 13;
    while($arr[$id]) {
        $id = $arr[$id];
    }
    echo $id; // 1

    不得不说:真是太优雅了!连我都佩服我自己了,同事更是五体投地,痛哭流涕。因为他写了几十行循环再判断再递归的代码,被我用两行代码替换了……

  • 相关阅读:
    openlayers5-webpack 入门开发系列一初探篇(附源码下载)
    leaflet-webpack 入门开发系列二加载不同在线地图切换显示(附源码下载)
    Cesium-空间分析之通视分析(附源码下载)
    Geoserver2.15.1 配置自带 GeoWebCache 插件发布 ArcGIS Server 瓦片(附配置好的 Geoserver2.15.1 下载)
    leaflet-webpack 入门开发系列一初探篇(附源码下载)
    maven学习(上)- 基本入门用法
    Java面试11|Maven与Git
    必须学会git和maven
    Git 安装和使用教程
    用git,clone依赖的库
  • 原文地址:https://www.cnblogs.com/jiangxiaobo/p/6229570.html
Copyright © 2020-2023  润新知