javascript、php实现无限级分类的两种方式
I、php:
一、梯式:
- 代码:
/* @desc:获取梯式分类 @param data 需要转换的数据 @param pkey 上级的键名 @param key 主键名 @param pid 顶级id @param depth 深度 默认1 @param level 起始层级 默认0 @return ret 转换后的数组 */ function getleveltree($data,$pkey,$key,$pid = 0,$depth = 1,$level = 0){ $ret = array(); if($level < $depth){ foreach ($data as $v){ if($v[$pkey] == $pid){ $v['level'] = $level; $ret[] = $v; $ret = array_merge($ret,getleveltree($data,$pkey,$key,$v[$key],$depth,$level+1)); } } } return $ret; }
- 测试:
$data = array( array( 'id' => 1, 'pid' => 0 ), array( 'id' => 2, 'pid' => 1 ), array( 'id' => 5, 'pid' => 1 ), array( 'id' => 3, 'pid' => 2 ), array( 'id' => 4, 'pid' => 3 ), );
- 输出:
array(1) { [0]=> array(3) { ["id"]=> int(1) ["pid"]=> int(0) ["level"]=> int(0) } }
二、裂变式:
- 代码:
/* @desc:获取裂变式分类 @param data 需要转换的数据 @param pkey 上级的键名 @param key 主键名 @param pid 顶级id 默认0 @param depth 深度 默认1 @return ret 转换后的数组 */ function getsubtree($data,$pkey,$key,$pid = 0,$depth = 1) { $ret = array(); if($depth > 0){ $depth --; foreach ($data as $v){ if($v[$pkey] == $pid){ $v['child'] = getsubtree($data,$pkey,$key,$v[$key],$depth); $ret[] = $v; } } } return $ret; }
- 测试:
$data = array( array( 'id' => 1, 'pid' => 0 ), array( 'id' => 2, 'pid' => 1 ), array( 'id' => 5, 'pid' => 1 ), array( 'id' => 3, 'pid' => 2 ), array( 'id' => 4, 'pid' => 3 ), ); $ret = getsubtree($data,'pid','id'); var_dump($ret);
- 输出:
array(1) { [0]=> array(3) { ["id"]=> int(1) ["pid"]=> int(0) ["child"]=> array(0) { } } }
II、javascript:
一、梯式:
- 代码:
/* @desc:获取梯式分类 @param data 需要转换的数据 @param pkey 上级的键名 @param key 主键名 @param pid 顶级id @param depth 深度 默认1 @param level 起始层级 默认0 @return ret 转换后的数组 */ function getleveltree(data,pkey,key,pid = 0,depth = 1,level = 0){ var ret = new Array() if(level < depth){ for (var i in data){ if(data[i][pkey] == pid){ data[i]['level'] = level ret.push(data[i]) ret = ret.concat(getleveltree(data,pkey,key,data[i][key],depth,level + 1)) } } } return ret }
- 测试:
var data = new Array( { 'id':1, 'pid':0 }, { 'id':2, 'pid':1 }, { 'id':3, 'pid':2 } ) var ret = getleveltree(data,'pid','id') console.log(ret)
- 输出:
[ { id: 1, pid: 0, level: 0 } ]
二、裂变式:
- 代码:
/* @desc:获取裂变式分类 @param data 需要转换的数据 @param pkey 上级的键名 @param key 主键名 @param pid 顶级id 默认0 @param depth 深度 默认1 @return ret 转换后的数组 */ function getsubtree(data,pkey,key,pid = 0,depth = 1) { var ret = new Array() if(depth > 0){ depth -- for (var i in data){ if(data[i][pkey] == pid){ data[i]['child'] = getsubtree(data,pkey,key,data[i][key],depth) ret.push(data[i]) } } } return ret }
- 测试:
var data = new Array( { 'id':1, 'pid':0 }, { 'id':2, 'pid':1 }, { 'id':3, 'pid':2 } ) var ret = getsubtree(data,'pid','id') console.log(ret)
- 输出:
[ { id: 1, pid: 0, child: [] } ]
分享标题:javascript、php实现无限级分类的两种方式
本文URL:http://scyanting.com/article/pseejo.html