zoukankan      html  css  js  c++  java
  • php 数组转化成为树形结构

    <?php
    $data=array(
        array("id"=>2,"pid"=>1),
        array("id"=>3,"pid"=>1),
        array("id"=>4,"pid"=>2),
        array("id"=>5,"pid"=>2),
        array("id"=>6,"pid"=>3),
        array("id"=>7,"pid"=>3),
        array("id"=>1,"pid"=>0),
    );
    $refer=array();//存储主键与数组单元的引用关系
    //遍历
    foreach($data as $k=>$v){
        $refer[$v['id']]=&$data[$k];//为每个数组成员建立对应关系
    }
    //遍历2
    foreach($data as $k=>$v){
            $parent=&$refer[$v['pid']];//获取父分类的引用
            $parent['child'][]=&$data[$k];//在父分类的children中再添加一个引用成员
    }
    print_r($data);
    //利用了一个$refer数组,时间复杂度是O(n) , 只需要单层循环,直接通过引用修改$data原数据,生成一个树状结构
    
    Array
    (
        [0] => Array
            (
                [id] => 2
                [pid] => 1
                [child] => Array
                    (
                        [0] => Array
                            (
                                [id] => 4
                                [pid] => 2
                            )
    
                        [1] => Array
                            (
                                [id] => 5
                                [pid] => 2
                            )
    
                    )
    
            )
    
        [1] => Array
            (
                [id] => 3
                [pid] => 1
                [child] => Array
                    (
                        [0] => Array
                            (
                                [id] => 6
                                [pid] => 3
                            )
    
                        [1] => Array
                            (
                                [id] => 7
                                [pid] => 3
                            )
    
                    )
    
            )
    
        [2] => Array
            (
                [id] => 4
                [pid] => 2
            )
    
        [3] => Array
            (
                [id] => 5
                [pid] => 2
            )
    
        [4] => Array
            (
                [id] => 6
                [pid] => 3
            )
    
        [5] => Array
            (
                [id] => 7
                [pid] => 3
            )
    
        [6] => Array
            (
                [id] => 1
                [pid] => 0
                [child] => Array
                    (
                        [0] => Array
                            (
                                [id] => 2
                                [pid] => 1
                                [child] => Array
                                    (
                                        [0] => Array
                                            (
                                                [id] => 4
                                                [pid] => 2
                                            )
    
                                        [1] => Array
                                            (
                                                [id] => 5
                                                [pid] => 2
                                            )
    
                                    )
    
                            )
    
                        [1] => Array
                            (
                                [id] => 3
                                [pid] => 1
                                [child] => Array
                                    (
                                        [0] => Array
                                            (
                                                [id] => 6
                                                [pid] => 3
                                            )
    
                                        [1] => Array
                                            (
                                                [id] => 7
                                                [pid] => 3
                                            )
    
                                    )
    
                            )
    
                    )
    
            )
    
    )
  • 相关阅读:
    ubuntu下编译安装uWebSockets
    centos7安装python3
    linux设置库文件加载包含路径
    centos7安装mysql和mysql-connector-c++
    SVN查看提交日志的命令
    [转]select模型的一种技巧运用-libevent
    一道题回顾计算机数值存储方式-原码,反码,补码
    msyql判断记录是否存在的三种方法
    windows下vs2013使用C++访问redis
    linux下查看端口的连接数
  • 原文地址:https://www.cnblogs.com/kevin-yang123/p/14154818.html
Copyright © 2011-2022 走看看