无限极分类获取数据方法

<?php
namespace app\admin\model;

use think\Model;

class GoodsCate extends Model
{

    //获取分类树
    public function get_tree ($pid = 0,$field = ‘*‘){
        $list = self::all(function($query)use($pid,$field){
            $query->where([‘pid‘=>$pid])->field($field);
        });
        foreach ($list as &$v){
            if(self::get([‘pid‘=>$v[‘id‘]])){
                $v[‘child‘] = self::get_tree($v[‘id‘],$field);
            }
        }
        return $list;
    }

    //根据id获取所有层级父类id
    public static function get_parent ($id = 0){
        $list = self::all();
        $arr = array_column($list,‘pid‘,‘id‘);
        $ids[] = $id;
        while($arr[$id]) {
            $id = $arr[$id];
            $ids[] = $id;
        }
        return $ids;
    }

    //根据id获取所有子级id
    public static function get_child ($id,&$ids=[]){
        array_push($ids,$id);
        $list = self::where(‘pid‘,$id)->column(‘id‘);
        foreach ($list as $v)
        {
            self::get_child($v,$ids);
        }
        return $ids;
    }

    //根据id获取当前数据及其子类列表
    public function get_list ($id=0,$field=‘*‘,$where){
        $info = self::where(‘id‘,$id)->alias(‘goods_cate‘)->field($field)->find();
        if($info)
        {
            $list[] = $info;
        }
        $list = $this->get_data($id,$list,$field,$where);
        return $list;
    }

    public function get_data($id,&$list=[],$field,$where)
    {
        $child = self::where(‘pid‘,‘in‘,$id)->alias(‘goods_cate‘)->field($field)->where($where)->select();
        if($child) {
            foreach ($child as $item) {
                $list[] = $item;
                self::get_data($item[‘id‘], $list,$field,$where);
            }
        }
        return $list;
    }

}

原文地址:https://www.cnblogs.com/ivy-zheng/p/12146254.html

时间: 2024-10-12 06:32:52

无限极分类获取数据方法的相关文章

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

当你学习php无限极分类的时候,大家都觉得一个字"难"我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究. 到网上一搜php无限极分类,很多,但好多都是一个,并且,写的很乱,代码很多,让我们怎么学习嘛,那些都不靠谱,还是自己捣鼓捣鼓无限极分类了. 比如一个category表:有id, name, pid, sort 就这四个简单的字段,不要太复杂了. id    name          pid      sort1     PHP           0   

无限极分类的实现方法(面试题)

递归实现无限极分类 data=[ {"cat_id":3,"name":"沙河","parent_id":1}, {"cat_id":4,"name":"sb镇","parent_id":3}, {"cat_id": 1, "name": "北京", "parent_id&quo

无限极分类 获取顶级id

<?php $sql = "select id, pid from tablename "; // 查询后 将结果处理成 如下数组格式 $arr = [ // id => pid 1 => 0, // 省略... 6 => 1, // 省略... 12 =>6 ]; // 建议将这数组缓存起来 $id = 12; while($arr[$id]) { $id = $arr[$id]; } echo $id; // 1 1.其实无限极分类原理清晰后就会发现,

thinkphp5.0无限极分类及格式化输出

首先我们来看数据表 从上图中可以发现,中国下有贵州,北京两个子节点,而北京有天安门一个子节点,纽约的子节点是"纽约的子类". 从pid为0看出,中国和纽约是顶级节点. 因为贵州的pid是1,而中国的id为1,所以贵州的父节点是中国,至于type字段,可以不用管,只是我自己的项目需要. 可以发现,着写数据在数据表中是无序的,并没有我们想象中的层次结构分明并且可读性很好. 那么,当使用无限极分类之后数据的输出是怎样的呢?如下: 这样就能够很清晰的看出他们的层次结构了,那么这样的效果在thi

C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现

今天做一个管理后台菜单,想着要用无限极分类,记得园子里还是什么地方见过这种写法,可今天找了半天也没找到,没办法静下心来自己写了: 首先创建节点类(我给它取名:AdminUserTree): 1 /// <summary> 2 /// 无限极节点类 3 /// </summary> 4 public class AdminUserTree 5 { 6 /// <summary> 7 /// 节点信息 8 /// </summary> 9 public int

C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制

在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Caching 我理解是在内容中实现,这种方法适用于单服务器的生产环境. 2.a Distributed Cache 分部式缓存实现. 3.Response Cache 这种方式我理解为客户端缓存. 今天我只用了第一种实现方法,内存中缓存,之所以用这种方法我是觉得我这里用缓存的初衷是为了减少访问数据库的次数,

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

本文和大家分享的主要是php中 实现smarty 模板无限极分类相关内容,一起来看看吧,希望对大家 学习php有所帮助. <?php $conn = mysql_connect("localhost","admin","admin"); mysql_select_db("people_shop",$conn); mysql_query("SET NAMES 'UTF-8'"); $class_arr=

PHP无限极分类生成树方法

你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了.这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,整理分享了. function generateTree($items){ $tree = array(); foreach($items as $item){ if(isset($items[$item['pid']])){ $items[$item['pid']]['son'][] = &$items[$item['id']]; }els

用递归的方法实现无限极分类

通常我在写项目的时候,在写一些例如商城分类的时候会实现对应分类的上级分类,或者其它项目部门管理的上级部门的时候一般就会用到无限极分类来进行分类 第一步:首先在数据表设计的时候,如果要实现无限极分类,一般我会在数据表多添加一个字段pid,下面我通过一张新建的数据表来说明一下, (1)建表: -- ---------------------------- -- Table structure for pid -- ---------------------------- DROP TABLE IF