zoukankan      html  css  js  c++  java
  • 无限级分类查找--子孙树,家谱树

     无限级分类查找

    $area=array(
    array('id'=>1,'name'=>'北京','parent'=>0),
    array('id'=>2,'name'=>'昌平','parent'=>1),
    array('id'=>3,'name'=>'海淀','parent'=>2),
    array('id'=>4,'name'=>'天津市','parent'=>0),
    array('id'=>5,'name'=>'市辖区','parent'=>4),
    array('id'=>6,'name'=>'和平区','parent'=>5),
    array('id'=>7,'name'=>'河北省','parent'=>0),
    array('id'=>8,'name'=>'石家庄市','parent'=>7),
    array('id'=>9,'name'=>'长安区','parent'=>8)
    );

    1:查找子树:找到该节点下的子节点

    /**
     * 找子树,子节点
     */
    function findson($arr,$id=0)
    {
        $sons=array();
        foreach ($arr as $value) {
            if ($value['parent']==$id) {
                $sons=$value;
            }
        }
        return $sons;
    }
    
    print_r(findson($area,0));

    2:查找子孙树:找到该节点下的所有子节点以及子节点下的子节点,无限查找,知道没有子节点为止,这个用递归调用来查找。

    /**
     * 找子孙树
     */
    function subtree($arr,$id,$lev=1)
    {
         $subs=array();
        foreach ($arr as $value) {
            if ($value['parent']==$id) {
                $value['lev']=$lev;
                $subs[]=$value;
                $subs=array_merge($subs,subtree($arr,$value[id],$lev+1));
            }
        }
    
        return $subs;
    
    }

    3:查找家谱树:找到该节点的所有父节点以及通过父节点继续往上查找,此处的递归调用和上面稍稍有点不同,这里的数组处理方式是通过static关键字来操作。

    /**
     * 家谱树
     */
    function familytree($arr,$id)
    {static $tree=array();
        foreach ($arr as $value) {
            if ($value['id']==$id) {
                $tree[]=$value;
                if ($value['parent']>0) {
                    familytree($arr,$value['parent']);
                }   
            }
        }
        return $tree;
    
    }
  • 相关阅读:
    创建新用户
    发生tcp丢包(拥堵、超时)重传
    centos7装机和初步运维
    论上山和下山哪个费力
    一、Linux简介
    服务器设置FTP
    自定义部署资源服务器
    代码管理工具 Git
    远程连接工具rdcman
    dubbo学习(八)dubbo项目搭建--消费者(服务消费者)
  • 原文地址:https://www.cnblogs.com/doyourself/p/4079699.html
Copyright © 2011-2022 走看看