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

2021-09-10 04:35:15 字數 1374 閱讀 2298

$arr = array(   

0=>array('id'=>1,'pid'=>0,'name'=>'亞洲'),

1=>array('id'=>2,'pid'=>0,'name'=>'北美洲'),

2=>array('id'=>3,'pid'=>1,'name'=>'中國'),

3=>array('id'=>4,'pid'=>2,'name'=>'美國'),

4=>array('id'=>5,'pid'=>3,'name'=>'北京'),

5=>array('id'=>6,'pid'=>3,'name'=>'上海'),

6=>array('id'=>7,'pid'=>5,'name'=>'海淀區'),

);function getsons($arr,$id=0)

} return $temp;

}var_dump( getsons($arr,0));

**解析:

第一次迴圈的時候,肯定是亞洲符合條件,所以亞洲會被存入臨時陣列。注意這時第一層迴圈並不會繼續執行下去,因為我們這個時候要去查詢亞洲還有沒有子孫。通過呼叫自身,再次進入第二層迴圈,這次我們找到了中國,找到中國後,第二層又會被打斷,進入第三層,找到了北京,第三層被打斷,進入第四層,找到了海淀,第四層被打斷,進入第五層,找海淀的子孫,通過遍歷陣列可知,海淀並沒有子孫。第五層會繼續執行下去,就是最後一句return tem

p。這個

函式的返

回值會返

回到第四

層中呼叫

他的地方

,當然這

裡的temp。這個函式的返回值會返回到第四層中呼叫他的地方,當然這裡的

temp。這

個函式的

返回值會

返回到第

四層中調

用他的地

方,當然

這裡的temp是個空陣列。第四層會繼續執行下去,tem

p裡此時

包含海淀

,返回到

第三層,

temp裡此時包含海淀,返回到第三層,

temp裡此

時包含海

澱,返回

到第三層

,temp裡包含了北京和海淀,以此類推,第二層中國,北京,海淀,第一層亞洲,中國,北京,海淀。到此時第一層迴圈繼續執行下去,會找到和亞洲平級的北美洲,北美洲又會通過遞迴查詢自己的子孫,一層一層巢狀執行下去。

注意:每次函式遞迴呼叫的時候,$temp都會被初始化,這樣儲存的資料就會丟失,所以要用array_merge函式把兩個陣列的資料整合在一起。

遞迴**:

PHP遞迴實現無限級分類

在一些複雜的系統中,要求對資訊欄目進行無限級的分類,以增強系統的靈活性。那麼php是如何實現無限級分類的呢?我們在本文中使用遞迴演算法並結合mysql資料表實現無限級分類。在一些複雜的系統中,要求對資訊欄目進行無限級的分類,以增強系統的靈活性。那麼php是如何實現無限級分類的呢?我們在本文中使用遞迴...

PHP實現遞迴無限級分類

在一些複雜的系統中,要求對資訊欄目進行無限級的分類,以增強系統的靈活性。那麼php是如何實現無限級分類的呢?我們在本文中使用遞迴演算法並結合mysql資料表實現無限級分類。遞迴,簡單的說就是一段程式 的重複呼叫,當把 寫到乙個自定義函式中,將引數等變數儲存,函式中重複呼叫函式,直到達到某個條件才跳出...

PHP遞迴實現無限級分類

在一些複雜的系統中,要求對資訊欄目進行無限級的分類,以增強系統的靈活性。那麼php是如何實現無限級分類的呢?我們在本文中使用遞迴演算法並結合mysql資料表實現無限級分類。在一些複雜的系統中,要求對資訊欄目進行無限級的分類,以增強系統的靈活性。那麼php是如何實現無限級分類的呢?我們在本文中使用遞迴...