地区分类
功能实现:
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(" ",$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(" ",($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;
}

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

718

被折叠的 条评论
为什么被折叠?



