php无限递归部门或者栏目树

259 阅读1分钟
function getTrees($array, $pid=0){
    $tree = [];
    foreach ($array as $item) {
        if ($item['superior_id'] == $pid) {
            $item['children'] = $this->getTrees($array, $item['id']);
            $tree[] = $item;
        }
    }
    return $tree;
}
public function getTrees(array $direy)
{
    $tree = [];
    foreach ($direy as $item) {
        $data                                 = [];
        $data[MaterialDirectoriesModel::NAME] = $item[MaterialDirectoriesModel::NAME];
        $data[MaterialDirectoriesModel::UID]  = $item[MaterialDirectoriesModel::UID];
        if (count($item['children']) > 0) {
            $data['children'] = $this->getTrees($item['children']);
        }
        $tree[] = $data;
    }

    return $tree;
}

通用

function getDataTree($items, $idKey, $pidKey, int $pid = 0): array
{
    $tree = [];
    foreach ($items as $idx => $item) {
        if ($item[$pidKey] == $pid) {
            $children = getDataTree($items, $idKey, $pidKey, $item[$idKey]);
            if ($children) {
                $item['children'] = $children;
                unset($items[$idx]);
            }
            $tree[] = $item;
        }
    }

    return $tree;
}

根据当前部门id查询上级部门

function getPidDp($id)
{
    $tree = [];
    $dpt  = Department::where('qxid', $id)->find();
    if (!empty($dpt)) {
        $tree   = getPidDp($dpt['parentid']);
        $tree[] = $dpt['name'];
    }

    return $tree;
}

递归另外写法

function getDepartment($id, $departments) {
    $department = array();
    foreach ($departments as $key => $value) {
        if ($value['parent_id'] == $id) {
            $department[] = $value;
            $department = array_merge($department, getDepartment($value['id'], $departments));
        }
    }
    return $department;
}