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;
}
