首頁  >  文章  >  後端開發  >  php之遞歸實現無限極分類

php之遞歸實現無限極分類

王林
王林原創
2023-05-07 11:32:072614瀏覽

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn