PHP 开发过程中 常用的树形结构
1.查询的数据集 转换成树形结构
function list_go_tree($list, $pk='id',$pid = 'pid',$child = '_child',$root=0) {
// 创建Tree
$tree = array();
if(is_array($list)) {
// 创建基于主键的数组引用
$refer = array();
foreach ($list as $key => $data) {
$refer[$data[$pk]] =& $list[$key];
}
foreach ($list as $key => $data) {
// 判断是否存在parent
$parentId = $data[$pid];
if ($root == $parentId) {
$tree[] =& $list[$key];
}else{
if (isset($refer[$parentId])) {
$parent =& $refer[$parentId];
$list[$key]['name']='—'.$list[$key]['name'];
$parent[$child][] =& $list[$key];
}
}
}
}
return $tree;
2.第二种 纯递归树形结构
function testdigui2($data,$deptid=0){
$child = [];
foreach ($data as $key => $value) {
if($value['pid'] == $deptid){
$child[$value['deptid']] = $value;
//去掉自己 自己不可能是自己儿子的儿孙
unset($data[$key]);
$child[$value['deptid']]['child'] = testdigui2($data,$value['deptid']);
}
}
return $child;
}
2.把查询的结果集 下拉的方式显示
/**
* 通过传入要查找的人的pid来递归查找他的下属 (新)
* @param array $data 数组代替数据库中的数据
* @param integer $pid 父id
* @param array &$result 结果数组,&保证变量常驻
* @param integer $deep 输出的分隔符--,无实际意义
* @return 树状结构数组
*/
function getListinfo( $data, $pid=0, &$result=array(), $deep = 0 ) {
$deep+=1;
foreach ( $data as $key => $val ) {
if ( $pid == $val['pid'] ) {
$result[$key]['deptname'] = $val['deptname'];
$result[$key]['deptid'] = $val['deptid'];
$result[$key]['deptpid'] = $val['pid'];
getListinfo( $data, $val['deptid'], $result, $deep );
}
}
return $result;
}

浙公网安备 33010602011771号