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