zoukankan      html  css  js  c++  java
  • php 实现树形结构

    <?php
    class Tree{
    private $OriginalList;
    public $pk;//主键字段名
    public $parentKey;//上级id字段名
    public $childrenKey;//用来存储子分类的数组key名

    function __construct($pk="id",$parentKey="pid",$childrenKey="children"){
    if(!empty($pk) && !empty($parentKey) && !empty($childrenKey)){
    $this->pk=$pk;
    $this->parentKey=$parentKey;
    $this->childrenKey=$childrenKey;
    }else{
    return false;
    }

    }
    //载入初始数组
    function load($data){
    if(is_array($data)){
    $this->OriginalList=$data;
    }
    }

    /**
    * 生成嵌套格式的树形数组
    * array(..."children"=>array(..."children"=>array(...)))
    */
    function DeepTree($root=0){
    if(!$this->OriginalList){
    return FALSE;
    }
    $OriginalList=$this->OriginalList;
    $tree=array();//最终数组
    $refer=array();//存储主键与数组单元的引用关系
    //遍历
    foreach($OriginalList as $k=>$v){
    if(!isset($v[$this->pk]) || !isset($v[$this->parentKey]) || isset($v[$this->childrenKey])){
    unset($OriginalList[$k]);
    continue;
    }
    $refer[$v[$this->pk]]=&$OriginalList[$k];//为每个数组成员建立引用关系
    }
    //遍历2
    foreach($OriginalList as $k=>$v){
    if($v[$this->parentKey]==$root){//根分类直接添加引用到tree中
    $tree[]=&$OriginalList[$k];
    }else{
    if(isset($refer[$v[$this->parentKey]])){
    $parent=&$refer[$v[$this->parentKey]];//获取父分类的引用
    $parent[$this->childrenKey][]=&$OriginalList[$k];//在父分类的children中再添加一个引用成员
    }
    }
    }
    return $tree;
    }
    }
    $data=array(
    0 => array("id"=>1,"pid"=>0),
    1 => array("id"=>2,"pid"=>0),
    2 => array("id"=>3,"pid"=>1),
    3 => array("id"=>4,"pid"=>3),
    4 => array("id"=>5,"pid"=>2),
    );
    var_dump($data);
    $tree=new Tree("id","pid","children");
    $tree->load($data);
    $treelist=$tree->DeepTree();//所有分类树结构
    var_export($treelist);//查看结果
    $subtree=$tree->DeepTree(1);//获取id为1下面的子树
    var_export($subtree);
    ?>

    转自http://www.thinkphp.cn/topic/7487.html

  • 相关阅读:
    常用PHP array数组函数
    每天学习30分钟新知识之html教程1
    laravel学习之路2: jwt集成
    JWT简介json web token bear token
    MDwiki 调研
    laravel学习之路1:认证相关
    OAuth 2.0介绍
    第一行代码 6.4 数据存储全方案-详解持久化数据- 数据库
    github(1)安装及使用图文详解
    Android集成讯飞语音、百度语音、阿里语音识别
  • 原文地址:https://www.cnblogs.com/liuwenbohhh/p/4441421.html
Copyright © 2011-2022 走看看