无限极分类查询及归类

一、无限极分类查询

//函数部分
function genTree($items){
    $tree = array(); //格式化好的树
    foreach ($items as $key=>$item){
        $items[$key]['data'] = array();
        if (isset($items[$item['parentid']])){
            $items[$item['parentid']]['data'][] = &$items[$item['id']];
        }else{
            $tree[] = &$items[$item['id']];
        }
    }
    return $tree;
}

// 查询省市区
   $provice = pgquery("select * from address where parentid!=0 order by id asc","all");
   //构造数据
   $items = array();
   foreach($provice as $value){
       $items[$value['id']] = $value;
   }
   $address = genTree($items); 

二、无限极分类归类显示
   // 函数部分
   function getTree($array, $pid =0, $level = 0){
    //声明静态数组,避免递归调用时,多次声明导致数组覆盖
    static $list = [];
    foreach ($array as $key => $value){
        //第一次遍历,找到父节点为根节点的节点 也就是pid=0的节点
        if ($value['parentid'] == $pid){
            //父节点为根节点的节点,级别为0,也就是第一级
            $value['level'] = $level;
            //把数组放到list中
            $list[] = $value;
            //把这个节点从数组中移除,减少后续递归消耗
            unset($array[$key]);
            //开始递归,查找父ID为该节点ID的节点,级别则为原级别+1
            getTree($array, $value['id'], $level+1);

        }
    }
    return $list;
}

// 调用
$list = getTree($list);
   foreach($list as $key=>$value){
       $list[$key]['nbsp'] = str_repeat('ㄴ', $value['level']);
   }

你可能感兴趣的:(php)