测试demo
------------------------------------------------------------------------------------
<?
php
function genTree(
$items,
$id='id',
$pid='pid',
$son = 'children'
){
$tree =
array();
//格式化的树
$tmpMap =
array();
//临时扁平数据
foreach (
$items as $item) {
$tmpMap[
$item[
$id]] =
$item;
}
foreach (
$items as $item) {
if (
isset(
$tmpMap[
$item[
$pid]])) {
$tmpMap[
$item[
$pid]][
$son][] = &
$tmpMap[
$item[
$id]];
} else {
$tree[] = &
$tmpMap[
$item[
$id]];
}
}
unset(
$tmpMap);
return $tree;
}
$items1 =
array(
array('id' => 1, 'pid' => 0, 'name' => '一级11' ),
array('id' => 11, 'pid' => 0, 'name' => '一级12' ),
array('id' => 2, 'pid' => 1, 'name' => '二级21' ),
array('id' => 10, 'pid' => 11, 'name' => '二级22' ),
array('id' => 3, 'pid' => 1, 'name' => '二级23' ),
array('id' => 12, 'pid' => 11, 'name' => '二级24' ),
array('id' => 9, 'pid' => 1, 'name' => '二级25' ),
array('id' => 14, 'pid' => 1, 'name' => '二级26' ),
array('id' => 4, 'pid' => 9, 'name' => '三级31' ),
array('id' => 6, 'pid' => 9, 'name' => '三级32' ),
array('id' => 7, 'pid' => 4, 'name' => '四级41' ),
array('id' => 8, 'pid' => 4, 'name' => '四级42' ),
array('id' => 5, 'pid' => 4, 'name' => '四级43' ),
array('id' => 13, 'pid' => 4, 'name' => '四级44' ),
array('id' => 15, 'pid' => 8, 'name' => '五级51' ),
array('id' => 16, 'pid' => 8, 'name' => '五级52' ),
array('id' => 17, 'pid' => 8, 'name' => '五级53' ),
array('id' => 18, 'pid' => 16, 'name' => '六级64' ),
);
$time1 =
microtime(
true);
var_dump(genTree(
$items1));
$time2 =
microtime(
true);
echo "function 时间1:".(
$time2-
$time1);
?>
------------------------------------------------------------------------
整合TP框架
-------------------------------------------------------------
控制器端:
// 先取出所有的权限
$priModel = D('Privilege'
);
$data =
$priModel->
priTree();
$arr =
$priModel->genTree(
$data);
模型端代码:
public function priTree(){
$data =
$this->
select();
return $this->_reSort(
$data);
}
#递归对有的分类进行重新排序
public function _reSort(
$data,
$parent_id=0,
$level=0
){
static $ret =
array();
foreach (
$data as $k =>
$v){
if(
$v['parent_id'] ==
$parent_id){
// 把level值放到这个分类里,这样就可以知道这个分类是第几级的
$v['level'] =
$level;
$ret[] =
$v;
// 再找这个分类的子分类
$this->_reSort(
$data,
$v['id'],
$level+1
);
}
}
return $ret;
}
#获取树形结果
public function genTree(
$items,
$id='id',
$pid='parent_id',
$son = 'children'
){
$tree =
array();
//格式化的树
$tmpMap =
array();
//临时保存数据
foreach (
$items as $item) {
$tmpMap[
$item[
$id]] =
$item;
foreach (
$items as $item) {
if (
isset(
$tmpMap[
$item[
$pid]])) {
$tmpMap[
$item[
$pid]][
$son][] = &
$tmpMap[
$item[
$id]];
} else {
$tree[] = &
$tmpMap[
$item[
$id]];
}
}
unset(
$tmpMap);
return $tree;
}
转载于:https://www.cnblogs.com/hgj123/p/6293935.html
相关资源:JAVA上百实例源码以及开源项目