1. 程式人生 > 其它 >PHP 用遞迴法和引用實現無限極分類

PHP 用遞迴法和引用實現無限極分類

技術標籤:Phpphp

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; }