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

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

WBOY
WBOYOriginal
2016-06-06 19:31:411990browse

写了一个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 
*/
?>

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn