ホームページ php教程 php手册 无限级菜单父节点查询所有子节点

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

Jun 06, 2016 pm 07:31 PM
thinkphp 無制限 お問い合わせ ノード メニュー

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

ログイン後にコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Xuexin.com で学歴を確認する方法 Xuexin.com で学歴を確認する方法 Mar 28, 2024 pm 04:31 PM

Xuexin.com で学歴を確認する方法

thinkphpプロジェクトの実行方法 thinkphpプロジェクトの実行方法 Apr 09, 2024 pm 05:33 PM

thinkphpプロジェクトの実行方法

12306 過去のチケット購入記録の確認方法 過去のチケット購入記録の確認方法 12306 過去のチケット購入記録の確認方法 過去のチケット購入記録の確認方法 Mar 28, 2024 pm 03:11 PM

12306 過去のチケット購入記録の確認方法 過去のチケット購入記録の確認方法

thinkphp にはいくつかのバージョンがあります thinkphp にはいくつかのバージョンがあります Apr 09, 2024 pm 06:09 PM

thinkphp にはいくつかのバージョンがあります

thinkphpの実行方法 thinkphpの実行方法 Apr 09, 2024 pm 05:39 PM

thinkphpの実行方法

thinkphpのインストール方法 thinkphpのインストール方法 Apr 09, 2024 pm 05:42 PM

thinkphpのインストール方法

laravelとthinkphpではどちらが優れていますか? laravelとthinkphpではどちらが優れていますか? Apr 09, 2024 pm 03:18 PM

laravelとthinkphpではどちらが優れていますか?

Apple携帯電話でアクティベーション日を確認する方法 Apple携帯電話でアクティベーション日を確認する方法 Mar 08, 2024 pm 04:07 PM

Apple携帯電話でアクティベーション日を確認する方法

See all articles