無限極分類的解決思路很簡單,關鍵是有兩點:
- 遞迴演算法
- 定義一個靜態變數來儲存陣列
程式碼部分
<?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 />';
}
複製程式碼
實現的效果如下