• 技术文章 >php教程 >php手册

    无限级菜单父节点查询所有子节点

    2016-06-06 19:31:41原创1241

    写了一个Thinkphp的节点工具,通过传入一个父id查询旗下的子节点。 ThinkPHP ?phpclass Tree{static public $treeList=array();//存放无限极分类结果static public $childNode=array();//存放父节点和父节点下面的子节点//无限级分类排序public function crea

    写了一个Thinkphp的节点工具,通过传入一个父id查询旗下的子节点。 ThinkPHP
     $value){
    			if($value['pid']==$pid){
    				$value['level'] = $level;
    				self::$treeList[] = $value;
    				unset($data[$key]);
    				self::create($data,$value['id'],$level+1);
    			}
    		}
    		return self::$treeList;
    	}
    	/******************************************************************************/
    	/**
    	 * 根据父节点,查询父节点下面的子节点
    	 * @param int $tid	tree表ID
    	 */
    	public function findChild($tid){
    		self::$childNode[]=(int)$tid;
    		$tree=M('Tree');
    		$map['id']=array('eq',$tid);
    		$allTree=$tree->field('id,pid')->select();	//查询tree表
    		self::findArrayNode($tid, $allTree);
    		return self::$childNode;//返回所有节点
    	}
    	
    	/**
    	 * 
    	 * @param int $id	节点ID
    	 * @param array $list	tree表所有的id,pid
    	 */
    	public function findArrayNode($id,$list){
    		foreach ($list as $key => $val){
    			if ($id==$val['pid']){
    				self::$childNode[]=(int)$val['id'];
    				self::findArrayNode($val['id'], $list);		//递归,传入新节点ID
    			}
    		}
    	}
    	
    	/******************************************************************************/
    	
    	//根据findChild()的返回结果,组装sql语句,用于查询news表
    	public function createSql($arr=array()){
    		$sql="";
    		foreach ($arr as $key => $val){
    			$sql.="tid=$val or ";
    		}
    		$sql=trim($sql);		//清除空格
    		$sql=trim($sql,'or');	//清除最后的or
    		$sql=trim($sql);		//清除空格
    		return $sql;
    	}
    	
    	/******************************************************************************/
    	
    	/**
    	 * 根据tid,获取where的sql 
    	 * @param int $tid
    	 */
    	public function getSql($tid){
    		return self::createSql(self::findChild($tid));		
    	}
    	
    }
    
    
    /*
    	用法
    	import('ORG.Util.Tree');
    	$list=Tree::create($data);
    	
    	排序前的数据结构
    	id   pid
    	1    0
    	2    0
    	3    1
    	4     3
    	
    	排序后的数据结构
    	id  pid  level
    	1   0    1
    	3   1   2
    	4   3    3
    	2   0   1 
    */
    ?>
    
    
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:PHP session信息存储到数据库的类 下一篇:安农微博墙
    PHP编程就业班

    相关文章推荐

    • ajax无刷新分页,支持id定位• Memcache 中实现消息队列• 随时给自己贴的图片加文字的php代码• 一步步编写PHP的Framework(十五)• Php 生成静态html文件

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网