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: [] } ]