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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM