地区/递归分类

本文介绍了一种使用PHP实现地区分类的方法,并通过递归函数处理多级分类数据。文章详细展示了如何利用AJAX请求从数据库中获取分类数据,并在网页上动态生成下拉菜单。此外,还提供了一个递归函数的例子,用于处理分类数据,形成树状结构。

地区分类

这里写图片描述
功能实现:
1)ajax请求查询数据页面

<?php  
    $id=isset($_GET['id'])?$_GET['id']:0;
    header('content-type:text/html;charset=utf-8');
    $pdo=new PDO('mysql:host=localhost;dbname=laravelinfo;','root','root');
    $pdo->exec('set names utf8');
    $data=$pdo->query('select * from sort where pid='.$id)->fetchAll(PDO::FETCH_ASSOC);
    echo json_encode($data);
?>

2)web页面显示

<?php  
    $id=isset($_GET['id'])?$_GET['id']:0;
    header('content-type:text/html;charset=utf-8');
    $pdo=new PDO('mysql:host=localhost;dbname=laravelinfo;','root','root');
    $pdo->exec('set names utf8');
    $data=$pdo->query('select * from sort where pid='.$id)->fetchAll(PDO::FETCH_ASSOC);
    // print_r($data);die;
?>
<select name="" class="box">
    <option value="">请选择</option>
    <?php foreach($data as $k => $v){ ?>
    <option value="<?= $v['id'] ?>"><?= $v['name'] ?></option>
    <?php } ?>
</select>
<script src="jquery.1.12.min.js"></script>
<script>
    $(function(){
        $(document).on('change','.box',function(){
            var obj=$(this);
            var id=obj.val();
            $.ajax({
                type:'get',
                url:'sorturl.php',
                data:{id:id},
                dataType:'json',
                success:function(res){
                    if(res==''){
                        obj.nextAll().remove();
                        return false;
                    }
                    var str='<select name="" class="box"><option value="">请选择</option>';
                    $.each(res,function(k,v){
                        str+='<option value="'+v.id+'">'+v.name+'</option>';
                    });
                    str+='</select>';
                    obj.nextAll().remove();
                    // alert(str);
                    obj.after(str);
                }
            })
        });
    })
</script>

递归分类1

这里写图片描述
功能实现:

<?php  
    header('content-type:text/html;charset=utf-8');
    $pdo=new PDO('mysql:host=localhost;dbname=laravelinfo;','root','root');
    $pdo->exec('set names utf8');
    $data=$pdo->query('select * from sort')->fetchAll(PDO::FETCH_ASSOC);
    function getSort($data,$pid=0,$level=''){
        static $arr=array();
        foreach($data as $k => $v){
            //如果该分类pid=0
            if($v['pid']==$pid){
                $v['level']=$level;
                $arr[]=$v;

                getSort($data,$v['id'],$level.'-------');
        // print_r($arr);die;
            }
        }
        return $arr;
    }
    $info=getSort($data);
    // print_r($info);die;
?>
<select name="" id="">
    <?php foreach($info as $k => $v){ ?>
        <option value=""><?= $v['level'] ?><?= $v['name'] ?></option>
    <?php } ?>
</select>

递归分类2

效果实现如:
这里写图片描述
上代码:

<?php
// 调用方法
$arr=infinite($data,0,0);//  无限极分类

/**
无限极分类  递归循环
 */
/**
 * @param $list 要进行分类的数据
 * @param int $parent_id 父级的ID
 * @param int $deep deep树
 * @return array
 * 递归获取栏目
 */
function infinite($list = [],$parent_id = 0,$deep = 0){
    static $arr = [];
    foreach ($list as $v){
        if($v['parent_id'] == $parent_id){
            $v['deep'] = $deep;
            $v['title']=str_repeat("&nbsp;&nbsp;&nbsp;&nbsp;",$v['deep']).$v['title'];
//            var_dump($v);
            $arr[] = $v;
            infinite($list,$v['subject_id'],$deep + 1);
        }
    }
    return $arr;
}
?>
//  html 代码
 <select name="parent_id" class="select">
      <option value="0">顶级分类</option>
      {foreach from=$data item=list}
      <option value="{$list.subject_id}">
      <!--{str_repeat("&nbsp;",($list.deep']))}-->
      {$list.title}
      </option>
      {/foreach}
</select>

接口分类数据处理


/*$data    查询的所有数据
 * $pId    父id 默认为0
 * $level  子集层级
 */
public   function getChild($result,$parid=0,$lel=1){
    $data=array();
    foreach($result as $k => $v){
        if($v['superior']==$parid){
            $v['lel']=$lel;
            if($v['lel']<=2){
                $v['children']=$this->getChild($result,$v['id'],$v['lel']+1);
                $data[]=$v;
            }
        }
    }
    return $data;
}

/**
 *  tpshop
 * 获取商品一二三级分类
 * @return type
 */
function get_goods_category_tree(){
    $tree = $arr = $result = array();
    $cat_list = M('category')->cache(true)->where("is_show = 1")->order('sort')->select();//所有分类
    if($cat_list){
        foreach ($cat_list as $val){
            if($val['level'] == 1){
                $tree[] = $val;
            }
            if($val['level'] == 2){
                $arr[$val['parent_id']][] = $val;
            }
            if($val['level'] == 3){
                $crr[$val['parent_id']][] = $val;
            }
        }
        foreach ($arr as $k=>$v){
            foreach ($v as $kk=>$vv){
                $arr[$k][$kk]['children'] = empty($crr[$vv['id']]) ? array() : $crr[$vv['id']];
            }
        }

        foreach ($tree as $val){
            $val['children'] = empty($arr[$val['id']]) ? array() : $arr[$val['id']];
            $result[$val['id']] = $val;
        }
    }
    return $result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值