PHP實現無限極分類

Aaron_alive發表於2018-12-02

無限極分類的解決思路很簡單,關鍵是有兩點:

  • 遞迴演算法
  • 定義一個靜態變數來儲存陣列

程式碼部分

<?php

$array = [
    ['id' => 1, 'pid' => 0, 'name' => '廣東省'],
    ['id' => 2, 'pid' => 0, 'name' => '廣西省'],
    ['id' => 3, 'pid' => 1, 'name' => '廣州市'],
    ['id' => 4, 'pid' => 1, 'name' => '茂名市'],
    ['id' => 5, 'pid' => 1, 'name' => '清遠市'],
    ['id' => 6, 'pid' => 4, 'name' => '高州'],
    ['id' => 7, 'pid' => 4, 'name' => '化州'],
    ['id' => 8, 'pid' => 4, 'name' => '信宜'],
    ['id' => 9, 'pid' => 2, 'name' => '南寧市'],
];


/**
 * 遞迴實現無限極分類
 * @param $array 分類資料
 * @param $pid 父級id
 * @param $level 分類級別,用來顯示格式用的
 * @return $list 整理好分類的陣列
 */

function getTree($array, $pid = 0, $level = 0)
{

    //宣告靜態陣列,避免遞迴呼叫時,多次宣告導致陣列覆蓋
    static $list = [];
    foreach ($array as $key => $value) {
        if ($value['pid'] == $pid) {
            $value['level'] = $level;
            $list[]         = $value;
            unset($array[$key]);
            getTree($array, $value['id'], $level + 1);
        }
    }

    return $list;
}

/*
 * 獲得遞迴完的資料,遍歷生成分類
 */
$array = getTree($array);

foreach ($array as $value) {
    echo str_repeat('--', $value['level']), $value['name'].'<br />';
}
複製程式碼

實現的效果如下

無限極分類

相關文章