PHP將數據集轉換成樹狀結構


/**
 * 把返回的數據集轉換成Tree
 * @param array $list 要轉換的數據集
 * @param string $pid parent標記字段
 * @param string $level level標記字段
 * @return array
 */
function list_to_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];
                    $parent[$child][] =& $list[$key];
                }
            }
        }
    }
    return $tree;
}

/**
 * 將list_to_tree的樹還原成列表
 * @param  array $tree  原來的樹
 * @param  string $child 孩子節點的鍵
 * @param  string $order 排序顯示的鍵,一般是主鍵 升序排列
 * @param  array  $list  過渡用的中間數組,
 * @return array        返回排過序的列表數組
 */
function tree_to_list($tree, $child = '_child', $order='id', &$list = array()){
    if(is_array($tree)) {
        $refer = array();
        foreach ($tree as $key => $value) {
            $reffer = $value;
            if(isset($reffer[$child])){
                unset($reffer[$child]);
                tree_to_list($value[$child], $child, $order, $list);
            }
            $list[] = $reffer;
        }
        $list = list_sort_by($list, $order, $sortby='asc');
    }
    return $list;
}

 


免責聲明!

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



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