首頁  >  文章  >  後端開發  >  PHP數組轉樹結構以及樹狀結構轉數組

PHP數組轉樹結構以及樹狀結構轉數組

藏色散人
藏色散人轉載
2021-02-23 15:16:092333瀏覽

推薦:《PHP影片教學

public function index()
    {
        $data = [
            [
                'id'=>1,
                'parent_id' => 0,
                'name' => '第一个'
            ],

            [
                'id'=>2,
                'parent_id' => 0,
                'name' => '第二个'
            ],

            [
                'id'=>3,
                'parent_id' => 1,
                'name' => '第三个'
            ],

        ];
        $r = $this->list_to_tree($data);
        dump($r);
    }

PHP數組轉樹結構以及樹狀結構轉數組

##陣列轉樹結構

#
function list_to_tree($list, $root = 0, $pk = 'id', $pid = 'parent_id', $child = 'children'){
    // 创建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 = 0;
            if (isset($data[$pid])) {
                $parentId = $data[$pid];
            }
            if ((string)$root == $parentId) {
                $tree[] = &$list[$key];
            } else {
                if (isset($refer[$parentId])) {
                    $parent = &$refer[$parentId];
                    $parent[$child][] = &$list[$key];
                }
            }
        }
    }
    return $tree;}

#樹結構轉數組

#
function tree_to_list($tree = [], $children = 'children'){
    if (empty($tree) || !is_array($tree)) {
        return $tree;
    }
    $arrRes = [];
    foreach ($tree as $k => $v) {
        $arrTmp = $v;
        unset($arrTmp[$children]);
        $arrRes[] = $arrTmp;
        if (!empty($v[$children])) {
            $arrTmp = tree_to_list($v[$children]);
            $arrRes = array_merge($arrRes, $arrTmp);
        }
    }
    return $arrRes;}

以上是PHP數組轉樹結構以及樹狀結構轉數組的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除