所用测试数据
$arr = array( array('id' => 1, 'name' => '系统设置', 'pid' => 0), array('id' => 2, 'name' => '菜单设置', 'pid' => 0), array('id' => 3, 'name' => '添加菜单', 'pid' => 2), array('id' => 4, 'name' => '编辑菜单', 'pid' => 2), array('id' => 7, 'name' => '修改菜单', 'pid' => 4), array('id' => 5, 'name' => '网站设置', 'pid' => 1), array('id' => 6, 'name' => '支付设置', 'pid' => 0) );
1. 树形结构(格式一)
<?php /** * @description * @param array $arr 传入的二维数组 * @param string $pk 主键id * @param string $name 分类名称 * @param string $upid 表示父级id的字段 * @param int $root 根级别(最高父级一般为0) * @param int $index 层级 * @return array */ function getTree($arr = array(),$pk='id',$name='name',$upid='pid',$root=0,$index=0){ $tree = array(); foreach ($arr as $k=>$value) { if($value[$upid]==$root){ $value[$name] = str_repeat('|--', $index).$value[$name]; $tree[] = $value; $tree = array_merge($tree,getTree($arr, $pk, $name, $upid, $value[$pk], $index+1)); } } return $tree; } ?>
效果如下:

2.子目录结构(格式二)
<?php /** * @description * @param array $arr 二维数组 * @param string $pk 主键id * @param string $upid 表示父级id的字段 * @param string $child 子目录的键 * @return array */ function getTree($arr=array(),$pk='id',$upid='pid',$child='child'){ $items = array(); foreach($arr as $val){ $items[$val[$pk]] = $val; } $tree = array(); foreach($items as $k=>$val){ if(isset($items[$val[$upid]])){ $items[$val[$upid]][$child][]=&$items[$k]; }else{ $tree[] = &$items[$k]; } } return $tree; } ?>
效果如下:
