php无限极分类

php树状结构

 public function actionIndex()
{
    $categories = array(
        array('id'=>1,'name'=>'电脑','pid'=>0),
        array('id'=>2,'name'=>'手机','pid'=>0),
        array('id'=>3,'name'=>'笔记本','pid'=>1),
        array('id'=>4,'name'=>'台式机','pid'=>1),
        array('id'=>5,'name'=>'智能机','pid'=>2),
        array('id'=>6,'name'=>'功能机','pid'=>2),
        array('id'=>7,'name'=>'超级本','pid'=>3),
        array('id'=>8,'name'=>'游戏本','pid'=>3),
    );
    $tree = $categories;
    print_r(self::get_attr($tree,0));
}
public static function get_attr($a,$pid)
{
    $tree = array();                                //每次都声明一个新数组用来放子元素
    foreach($a as $v){
        if($v['pid'] == $pid){                      //匹配子记录
            $v['children'] = self::get_attr($a,$v['id']); //递归获取子记录
            if($v['children'] == null){
                unset($v['children']);             //如果子元素为空则unset()进行删除,说明已经到该分支的最后一个元素了(可选)
            }
            $tree[] = $v;                           //将记录存入新数组
        }
    }
    return $tree;                                  //返回新数组
}

获得一个父级级

public static function parents($groupid, $recursive = true, &$_parents = array())
{
    if ($groupid <= 0) {
        return array();
    }

    $groups = self::all();
    $parents = array();
    $pid = 0;
    foreach ($groups as $k => $group) {
        if ($group['s_id'] == $groupid) {
            $pid = $group['s_parent_id'];
            break;
        }
    }

    if ($pid > 0) {
        foreach ($groups as $k => $group) {
            if ($group['s_id'] == $pid) {
                $parents[] = $group;
                $_parents[] = $group;
                break;
            }
        }
        if (!$recursive) {
            return $parents;
        }
        return self::parents($pid, true, $_parents);
    } else {
        return $_parents;
    }

}

public static function all()
{
    $sql = "select * from zc_c_section where s_status=0";
    return app('mysql')->select($sql);
}

/**
 * 根据部门id查询出部门下的子部门id
 * @param $sid
 * @return array
 */
public static function getChildSid($sid)
{
    $return   = [];
    $rs = Section::getSecChildByParentId($sid);
    foreach ($rs as $k => $v) {
        $return[] = $v['s_id'];
        $child = self::getChildSid($v['s_id']);
        $return = array_merge($return, $child);
    }
    return $return;
}
/*
*/
public static function makeTree($data, $prestr='')
{
    $new_arr = array();
    foreach ($data as $k => $v) {
        if ($prestr) {
            if ($v == end($data)) {
                $v['s_name'] = $prestr.'└─ '.$v['s_name'];
            } else {
                $v['s_name'] =$prestr. '├─ '.$v['s_name'];
            }
        }
        if ($prestr == '') {
            $prestr_for_children = '  ';
        } else {
            if ($v == end($data)) {
                $prestr_for_children = $prestr.'   ';
            } else {
                $prestr_for_children = $prestr.'│  ';
            }
        }
        $v['child'] = self::makeTree($v['child'], $prestr_for_children);
        $new_arr[] = $v;
    }
    return $new_arr;
}

public static function getMake($arr)
{
    $str = '';
    foreach ($arr as $k => $v) {
        $str .= "<option value=''>{$v['s_name']}</option>";
        $str .= self::getMake($v['child']);
    }
    return $str;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值