PHP 用遞迴法和引用實現無限極分類
阿新 • • 發佈:2020-12-23
1、遞迴法實現
將原始陣列無限迴圈,按照層級向下找到子類並歸類,找到一個刪除一個,直到原始陣列下最後一組資料
function getChildTree($data, $id = 0)
{
//初始化兒子
$child = [];
//迴圈所有資料找$id的兒子
foreach ($data as $key => $datum) {
//找到兒子了
if ($datum['pid'] == $id) {
//儲存下來,然後繼續找兒子的兒子
$child[$datum['id']] = $datum;
//先去掉自己,自己不可能是自己的兒孫
unset($data[$key]);
//遞迴找,並把找到的兒子放到一個child的欄位中
$child[$datum['id']]['child'] = $this->getChildTree($data, $datum['id']);
}
}
return $child;
}
2、引用實現
先將原始陣列中的id作為鍵值重新排序一下, 然後通過 &引用根節點地址來賦值
function getChildTree($data)
{
$tree = [];
$newData = [];
//迴圈重新排列
foreach ($data as $datum) {
$newData[$datum['id']] = $datum;
}
foreach ($newData as $key => $datum) {
if ($datum['pid'] > 0) {
//不是根節點的將自己的地址放到父級的child節點
$newData[$datum['pid']]['child'][] = &$newData[$key];
} else {
//根節點直接把地址放到新陣列中
$tree[] = &$newData[$datum['id']];
}
}
return $tree;
}