php实现无限级分类的两种方式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
- 输出:
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实现无限级分类的两种方式的主要内容,如果未能解决你的问题,请参考以下文章