javascript、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: [] } ]
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。