您的位置 首页 php技术

PHP数组转树结构以及树结构转数组

public function index() {     $data = [ [ ‘id’=>1, ‘…

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

    } 

#数组转树结构#

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;
}
本文来自网络,不代表MuKe网站资源立场,转载请注明出处:https://www.somke.cn/archives/64

作者: delon

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

联系我们

在线咨询: QQ交谈

邮箱: lon_mail@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部