一道無限級分類題的 PHP 實現

2022-04-13 17:33:41 字數 1939 閱讀 6687

今天有網友出了道題:

給出如下的父子結構(你可以用你所用語言的類似結構來描述,第一列是父,第二列是子),將其梳理成類似如圖的層次父子結構。

origin = [('

a112

', '

a1122'),

('a', 'a1'

), ('a

', 'a2'

), ('a1

', '

a11'

), ('a2

', '

a21'

), ('a2

', '

a22'

), ('a

', 'a3'

), (

'a22

', '

a221'),

('a11

', '

a111'),

('a21

', '

a211'),

('a11

', '

a112'),

('a21

', '

a212'),

('a11

', '

a113'),

('a112

', '

a1121'),

('a3

', '

a31'

), (

'a31

', '

a311'),

('a22

', '

a222'),

('a31

', '

a312'),

('a31

', '

a313'),

('a311

', '

a3111'),

('a312

', '

a3121'),

('a3111

', '

a31111

')]

輸出結果:

看了一下是無限級分類的原理,可以用遞迴來實現:

<?php 

$origin =[

['a112', 'a1122'],['a', 'a1'],['a', 'a2'],['a1', 'a11'],['a2', 'a21'],['a2', 'a22'],['a', 'a3'],['a22', 'a221'],['a11', 'a111'],['a21', 'a211'],['a11', 'a112'],['a21', 'a212'],['a11', 'a113'],['a112', 'a1121'],['a3', 'a31'],['a31', 'a311'],['a22', 'a222'],['a31', 'a312'],['a31', 'a313'],['a311', 'a3111'],['a312', 'a3121'],['a3111', 'a31111']

];//

根據父id找出子資訊

function level($cate, $html = '-', $pid = '0', $level = 0)

}return

$arr;}

//構建頂級分類

$pids =;

$cids =;

foreach($origin

as$val

) $top = array_flip(array_diff($pids, $cids

));foreach($top

as$key => $val

) $res = level($origin, ' ');

foreach($res

as$k => $v

)

輸出:

PHP遞迴實現無限級分類

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

PHP實現遞迴無限級分類

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

PHP遞迴實現無限級分類

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