在web開發中,分類是極常見的功能。而無限極分類,顧名思義,就是依照層級無限進行分類。在前後端的互動過程中,要透過一定的方法來實現這種分類,而php的遞歸就是其中之一。
一、什麼是遞迴
遞迴是指在程式運作過程中,呼叫自身的一種技巧。透過遞歸可以將複雜的問題簡化為簡單的問題,從而更好的解決問題。在php中使用遞歸,需要明確遞歸的兩個要素:遞歸結束條件和遞歸表達式。
遞迴結束條件指的是遞迴何時停止的判斷條件,這通常是指到達某個特定的深度、狀態或擁有某個特定的值。在遞歸的過程中,如果沒有結束條件,程式將會陷入死循環。
遞迴表達式則是指在遞迴過程中,繼續執行遞迴的運算。通常情況下,遞歸表達式是在遞歸函數內部,透過自我呼叫函數來實現。
二、如何用遞歸實現無限極分類
我們可以使用遞歸來實現無限極分類。具體來說,我們可以定義一個遞歸函數,該函數接收一個參數,這個參數是一個數組,代表某一層級下的分類列表。函數內部進行遞歸操作,將每個分類依序遍歷,如果這個分類有子分類,就透過遞歸函數來遍歷子分類。在遍歷結束後,返回整個分類數組。
具體實作如下:
function infiniteCategory($data, $pid = 0, $level = 0) { static $result = array(); foreach ($data as $key => $value) { if ($value['parent_id'] == $pid) { $value['level'] = $level; $result[] = $value; infiniteCategory($data, $value['id'], $level + 1); } } return $result; }
解析如下:
(1)函數接收三個參數,一個是分類列表數組$data,一個是父級id默認為0的$pid,一個是層級預設為0的$level。
(2)定義一個靜態變量,用於儲存最終的分類結果。
(3)透過foreach循環遍歷分類列表,如果某個分類的parent_id等於$pid,表示這個分類屬於目前層級,將其加入到最終結果數組$result。
(4)然後呼叫遞歸函數,將目前分類的id作為$pid傳入,$level 1作為下一層分類的層級。
(5)遍歷結束後,傳回結果陣列。
下面來測試一下:
$data = array( array('id' => 1, 'name' => '电脑', 'parent_id' => 0), array('id' => 2, 'name' => '手机', 'parent_id' => 0), array('id' => 3, 'name' => '笔记本', 'parent_id' => 1), array('id' => 4, 'name' => '台式机', 'parent_id' => 1), array('id' => 5, 'name' => '智能手机', 'parent_id' => 2), array('id' => 6, 'name' => '非智能手机', 'parent_id' => 2), array('id' => 7, 'name' => '微型笔记本', 'parent_id' => 3), array('id' => 8, 'name' => '超级台式机', 'parent_id' => 4), array('id' => 9, 'name' => '小型台式机', 'parent_id' => 4), ); var_dump(infiniteCategory($data));
運行結果如下:
array(9) { [0]=> array(4) { ["id"]=> int(1) ["name"]=> string(6) "电脑" ["parent_id"]=> int(0) ["level"]=> int(0) } [1]=> array(4) { ["id"]=> int(3) ["name"]=> string(9) "笔记本" ["parent_id"]=> int(1) ["level"]=> int(1) } [2]=> array(4) { ["id"]=> int(7) ["name"]=> string(15) "微型笔记本" ["parent_id"]=> int(3) ["level"]=> int(2) } [3]=> array(4) { ["id"]=> int(4) ["name"]=> string(9) "台式机" ["parent_id"]=> int(1) ["level"]=> int(1) } [4]=> array(4) { ["id"]=> int(9) ["name"]=> string(18) "小型台式机" ["parent_id"]=> int(4) ["level"]=> int(2) } [5]=> array(4) { ["id"]=> int(8) ["name"]=> string(18) "超级台式机" ["parent_id"]=> int(4) ["level"]=> int(2) } [6]=> array(4) { ["id"]=> int(2) ["name"]=> string(6) "手机" ["parent_id"]=> int(0) ["level"]=> int(0) } [7]=> array(4) { ["id"]=> int(5) ["name"]=> string(12) "智能手机" ["parent_id"]=> int(2) ["level"]=> int(1) } [8]=> array(4) { ["id"]=> int(6) ["name"]=> string(15) "非智能手机" ["parent_id"]=> int(2) ["level"]=> int(1) } }
可以看到,已經成功將分類列表轉換成了無限極分類,根據level字段的值,可以看出每個分類所處的層級。
三、小結
透過遞歸實現無限極分類的方法,能夠讓我們在web開發中迅速完成分類功能,而且具有較高的靈活性。在使用遞歸時,需要注意結束條件的設置,否則可能陷入死循環。
以上是php之遞歸實現無限極分類的詳細內容。更多資訊請關注PHP中文網其他相關文章!