作者:Lee_吉 2018-06-30 来源:51CTO
I、php: 一、梯式:
- 代码:
/* @desc:获取梯式分类 @param data 需要转换的数据 @param pkey 上级的键名 @param key 主键名 @param pid 顶级id @param level 起始层级 默认0 @return ret 转换后的数组 */ function getleveltree($data,$pkey,$key,$pid = 0,$level = 0){ $ret = array(); foreach ($data as $v){ if($v[$pkey] == $pid){ $v['level'] = $level; $ret[] = $v; $ret = array_merge($ret,getleveltree($data,$pkey,$key,$v[$key],$level+1)); } } return $ret; }
- 测试:
$data = array( array( 'id' => 1, 'pid' => 0 ), array( 'id' => 2, 'pid' => 1 ), array( 'id' => 3, 'pid' => 2 ) ); $ret = getleveltree($data,'pid','id'); var_dump($ret);
- 输出:
二、裂变式:array(3) { [0]=> array(3) { ["id"]=> int(1) ["pid"]=> int(0) ["level"]=> int(0) } [1]=> array(3) { ["id"]=> int(2) ["pid"]=> int(1) ["level"]=> int(1) } [2]=> array(3) { ["id"]=> int(3) ["pid"]=> int(2) ["level"]=> int(2) } }
- 代码:
/* @desc:获取裂变式分类 @param data 需要转换的数据 @param pkey 上级的键名 @param key 主键名 @param pid 顶级id 默认0 @return ret 转换后的数组 */ function getsubtree($data,$pkey,$key,$pid = 0) { $ret = array(); foreach ($data as $v){ if($v[$pkey] == $pid){ $v['child'] = getsubtree($data,$pkey,$key,$v[$key]); $ret[] = $v; } } return $ret; }
- 测试:
$data = array( array( 'id' => 1, 'pid' => 0 ), array( 'id' => 2, 'pid' => 1 ), array( 'id' => 3, 'pid' => 2 ) ); $ret = getsubtree($data,'pid','id'); var_dump($ret);
- 输出:
II、javascript: 一、梯式:array(1) { [0]=> array(3) { ["id"]=> int(1) ["pid"]=> int(0) ["child"]=> array(1) { [0]=> array(3) { ["id"]=> int(2) ["pid"]=> int(1) ["child"]=> array(1) { [0]=> array(3) { ["id"]=> int(3) ["pid"]=> int(2) ["child"]=> array(0) { } } } } } } }
- 代码:
/* @desc:获取梯式分类 @param data 需要转换的数据 @param pkey 上级的键名 @param key 主键名 @param pid 顶级id @param level 起始层级 默认0 @return ret 转换后的数组 */ function getleveltree(data,pkey,key,pid = 0,level = 0){ var ret = new Array() 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],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 }, { id: 2, pid: 1, level: 1 }, { id: 3, pid: 2, level: 2 } ]
- 代码:
/* @desc:获取裂变式分类 @param data 需要转换的数据 @param pkey 上级的键名 @param key 主键名 @param pid 顶级id 默认0 @return ret 转换后的数组 */ function getsubtree(data,pkey,key,pid = 0) { var ret = new Array() for (var i in data){ if(data[i][pkey] == pid){ data[i]['child'] = getsubtree(data,pkey,key,data[i][key]) 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: [ [Object] ] } ]