> php教程 > php手册 > 无限级菜单父节点查询所有子节点

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

WBOY
풀어 주다: 2016-06-06 19:31:41
원래의
2112명이 탐색했습니다.

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

写了一个Thinkphp的节点工具,通过传入一个父id查询旗下的子节点。 ThinkPHP
<?php

class Tree{
	static public $treeList=array();//存放无限极分类结果
	static public $childNode=array();//存放父节点和父节点下面的子节点

	//无限级分类排序
	public function create($data,$pid = 0,$level = 1){
		foreach($data as $key => $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 
*/
?>

로그인 후 복사
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿