PHP 无限极递归查询分类

数据表关系:第一级:father=0;下级列表:father=id

$con = mysql_connect("localhost","root","root");
if (!$con){
    die('数据库连接失败: ' . mysql_error());
}else{
    mysql_query("SET NAMES UTF8");
    mysql_query("set character_set_client=utf8");
    mysql_select_db("shuj", $con);
    
    $sql = "SELECT * FROM toa_department WHERE jituanid=7";
    $res = fetch_all($sql);

    //获取树形data
    $tree = get_tree($res);

    $msg = array();
    $msg['tree_data'] = $tree;
    $output = json_encode($msg);
    print_r($output);
}
mysql_close($con);   //关闭数据库


//方法封装
function fetch_all($sql) {
    $result = array();
    $query = mysql_query($sql);
    while($row = mysql_fetch_assoc($query)) {
        $result[] = $row;
    }
    return $result;
}


//无限极递归方法
function get_tree($data, $pId=0)
{
    $tree = array();
    foreach($data as $k => $v)
    {
        if($v['father'] == $pId)
        {   //父亲找到儿子
            $v['children'] = get_tree($data, $v['id']);
            $tree[] = $v;
        }
    }
    return $tree;
}

//children有数据才显示
function tree_children($data, $pId=0)
{
    $tree = array();
    foreach($data as $k => $v)
    {
        if($v['pid'] == $pId)
        {
            $child = tree_children($data, $v['id']);
            if (count($child)) {
                $v['children'] =  $child;
            }
            $tree[] = $v;
        }
    }
    return $tree;
}

//引用方法
function getTree($list, $pid = 0)
{
    $tree = [];
    if (!empty($list)) {        //先修改为以id为下标的列表
        $newList = [];
        foreach ($list as $k => $v) {
            $newList[$v['id']] = $v;
        }
        //然后开始组装成特殊格式
        foreach ($newList as $key=>$value) {
            if ($pid == $value['pid']) {//先取出顶级
                
                $tree[] = &$newList[$value['id']];
                
            }elseif (isset($newList[$value['pid']])){//再判定非顶级的pid是否存在,如果存在,则再pid所在的数组下面加入一个字段items,来将本身存进去
                $newList[$value['pid']]['children'][] = &$newList[$value['id']];
            }
        }
    }
    return $tree;
}


//其他方法
//结合html 
function Tree2($data, $pId=0)
{
    $html = '';
    foreach($data as $k => $v)
    {
        if($v['father'] == $pId)
        {        //父亲找到儿子
            $html .= "<li>".$v['name'];
            $html .= Tree2($data, $v['id']);
            $html = $html."</li>";
        }
    }
    return $html ? '<ul>'.$html.'</ul>' : $html ;
}

//分隔符显示
function Tree_sort($data, $pId=0,$t=-1)
{
    $t++;
    global $temp;
    foreach($data as $k => $v)
    {
        if($v['father'] == $pId)
        {        //父亲找到儿子
            $v['name'] = str_repeat('&nbsp;',$t*3).'|--'.$v['name'];
            $temp[] = $v;
            Tree_sort($data,$v['id'],$t);
        }
    }
    return $temp;
}

//将树形结构转为非树形
function trim_deep($tree){
    static $arr = [];
    foreach($tree as $k => $v){
        if(is_int($k) && is_array($v)){
            if(array_key_exists('id',$v)){
                $tmp = $v;
                $tmp['children'] = null;
                $arr[] = $tmp;
                if(!empty($v['children'])) trim_deep($v['children']);
            }
        }
    }
    return $arr;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值