無限極分類的解決思路很簡單,關鍵是有兩點:php
代碼部分算法
<?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 />';
}
複製代碼
實現的效果以下 數組