- 代码:
/*@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);
- 输出:
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) { ???????} ?????} ???} ?}}}}
php实现无限级分类的两种方式
原文地址:http://blog.51cto.com/12173069/2131148