标签:pid 分类 无限级 etl tree AC esc 实现 gets
一、梯式:/*
@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) {
}
}
}
}
}
}
}
标签:pid 分类 无限级 etl tree AC esc 实现 gets
原文地址:http://blog.51cto.com/12173069/2131148