1. 程式人生 > >無限級分類之遞迴查詢子孫樹

無限級分類之遞迴查詢子孫樹

利用遞迴查詢子欄目以及子孫欄目,該程式碼僅供參看。

<?php 
/*
關係,分析出:	
		北京
			海淀
			昌平
		山西
			長治
				縣市1
					小康村
				縣市2
			太原
		安徽
*/
$area = array(
	array('id'=>1, 'name'=>'安徽', 'parent'=>0),
	array('id'=>2, 'name'=>'海淀', 'parent'=>7),
	array('id'=>3, 'name'=>'長治', 'parent'=>8),
	array('id'=>4, 'name'=>'昌平', 'parent'=>7),
	array('id'=>5, 'name'=>'縣市1', 'parent'=>3),
	array('id'=>6, 'name'=>'太原', 'parent'=>8),
	array('id'=>7, 'name'=>'北京', 'parent'=>0),
	array('id'=>8, 'name'=>'山西', 'parent'=>0),
	array('id'=>9, 'name'=>'縣市2', 'parent'=>3),
	array('id'=>10, 'name'=>'小康村', 'parent'=>5),
	);

//找子欄目
function findson($arr, $id){
	
//找兒子
	$son = array();

	foreach ($arr as $v) {
		if ($v['parent'] == $id) {
			$son[] = $v;
		}
	}
	return $son;
}

print_r(findson($area, 0));



//利用遞迴找子孫樹
//在函式中宣告的static靜態變數,無論函式呼叫多少次,只初始化一次,
/**
	static總結
		1.修飾類的屬性和方法為靜態屬性,靜態方法
		2.static::method(),延遲繫結
		3.在函式中,宣告靜態變數
**/

function subtree($arr, $id, $lev=1){ //id表示我們最初查詢的id
	static $subs = array();
	//$subs = array(); //如果不適用static,可以和array_merge搭配使用

	foreach ($arr as $v) {
		if ($v['parent'] == $id) {
			$v['lev'] = $lev;
			$subs[] = $v;
			subtree($arr,$v['id'], $lev+1); //最重要的一步
			//$subs = array_merge($subs, subtree($arr, $v['id'], $lev+1)); 
			
		}
	}
	return $subs;
}

//print_r(subtree($area,0,1));

$tree = subtree($area, 0, 1);

foreach ($tree as $v) {
	echo str_repeat('  ', $v['lev']).$v['name'],'<br />';
}


相關推薦

無限分類查詢子孫

利用遞迴查詢子欄目以及子孫欄目,該程式碼僅供參看。 <?php /* 關係,分析出: 北京 海淀 昌平 山西 長治 縣市1 小康村 縣市2

無限分類查找子孫

return inux ati code arr == merge ade find 1 <?php 2 header("Content-Type:text/html;charset=utf-8"); 3 $cate=array( 4 array(

c# 選單無限分類-利用

表結構: 前臺程式碼: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inheri

以一次專案經歷淺談php無限分類的關係

專案背景: 新專案是一個分銷系統,核心技術就是無限極分類,每個會員都可以邀請別人進入這個團隊,會員可以升級,可以享受獎勵,前提是不斷地邀請別人加入,這樣每個團隊的長遠可以層層繫結關係。 資料庫設計: 資料庫的user表這樣設計,

mybatis 實現查詢結構節點

mybatis 實現遞迴查詢出樹結構節點 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.

MyBatis自身集合巢狀,查詢目錄(適用於MySQL、ORACLE等資料庫,程式碼都寫在XML中,通過SQL完成)

JAVA程式碼實現(連結):MySql、Oracle(通用方法)遞迴查詢生成檔案目錄樹(JAVA實現 遞迴過程中不訪問資料庫,遞迴之前只訪問兩次 進行遞迴前資料準備)   以下是XML中實現檔案樹的查詢、遞迴 場景:根據交易編碼,查詢檔案樹 檔案、資料夾都存放TRADER_

PostgreSQL查詢實現狀結構查詢

在Postgresql的使用過程中發現了一個很有意思的功能,就是對於需要類似於樹狀結構的結果可以使用遞迴查詢實現。比如說我們常用的公司部門這種資料結構,一般我們設計表結構的時候都是類似下面的SQL,其中parent_id為NULL時表示頂級節點,否則表示上級節點

php 函式的三種實現方式 php利用函式實現無限分類

遞迴函式是我們常用到的一類函式,最基本的特點是函式自身呼叫自身,但必須在呼叫自身前有條件判斷,否則無限無限呼叫下去。實現遞迴函式可以採取什麼方式呢?本文列出了三種基本方式。理解其原來需要一定的基礎知識水品,包括對全域性變數,引用,靜態變數的理解,也需對他們的作用範圍有所理解。遞迴函式也是解決無限級分類的一個很

mysql查詢,mysql中從子類ID查詢所有父類(做無限分類經常用到)

由於mysql 不支援類似 oracle with ...connect的 遞迴查詢語法之前一直以為類似的查詢要麼用儲存過程要麼只能用程式寫遞迴查詢.現在發現原來一條sql語句也是可以搞定的先來看資料表的結構如下:id  name    parent_id&n

php實現無限分類(最新版)(轉發自php中文網的大家講道理)

php遞迴實現無限級分類樹(最新版) 程式碼如下: /** * 將資料格式化成樹形結構 * @author Xuefen.Tong * @param array $items * @return array */ function gen

php 無限分類 +sort排序 和 非

1 先總結非遞迴 資料表: id name pid path 1 php 0 0 2 mysql 0 0 3 linux

PHP無限分類的實現(不使用

無限級分類在開發中經常使用,例如:部門結構、文章分類。無限級分類的難點在於“輸出”和“查詢”,例如 將文章分類輸出為<ul>列表形式; 查詢分類A下面所有分類包含的文章。 1.實現原理 在《無限級分類實現思路》一文中介紹了幾種常見的實現方法,各有利弊。其中“改進前序遍歷樹”資料結構

CI框架(無限分類+

//無級分類+遞迴 public function digui(){ $crr = $this->db->get('category')->result_array(); $list['type'] = $this->nolimit($crr,0,

無限分類的原理(方法)

在web開發當中,我們經常會遇到無限級分類,既中國有北京、天津、河北、河南等省(自治區、直轄市),河北有石家莊、張家口、唐山等地級市,石家莊又有正定縣、無極縣,正定縣又有。。。。 實現這種無限級分類,我們只需要在欄位中增加一個pid,用於記錄父類的id,這時候我們就可以採用

php 實現不用的樹形陣列建構函式 無限分類

/** * 建立父節點樹形陣列 * 引數 * $ar 陣列,鄰接列表方式組織的資料 * $id 陣列中作為主鍵的下標或關聯鍵名 * $pid 陣列中作為父鍵的下標或關聯鍵名 * 返回 多維陣列 **/ function find_parent($ar,

php實現無限分類

一.資料庫設計123456789101112131415161718192021222324252627282930313233343536373839CREATE TABLE `bg_cate` (`cate_Id` int(30) unsigned NOT NULL AU

無限聯動查詢上級節點

最近專案中遇到的問題做下總結 遞迴查詢 : (無限級聯)樹的最末尾端的code反查上級所有節點 ## public List<Map<String, Object>> getCategoryByImtemcode(String ite

thinkphp實現無限分類

在專案的common.php下面加如下函式 function Cate($arr,$parent=0,$level=0,$html="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

php 無限查詢子id 子類 根據父分類 父ID 查詢所有子分類 子ID

    function posterity($fid) {  global $connection; //static $children=array(); global $children; $sql = "SELECT DEPT_ID  FROM department WHERE DEPT_PAREN

php實現無限分類(牛逼)

轉載路徑:http://www.php.cn/php-weizijiaocheng-353267.html 無限級樹狀圖可以說是無限級欄目的一個顯著特徵,我們接下來就來看看兩種不同的寫法。 一.資料庫設計 1 2 3