douran7929 2018-10-31 06:59 采纳率: 100%
浏览 75
已采纳

如何将特定结构化数组转换为“树”结构数组?

I want to create a tree array from multidimensional array. I want to create a directory structure so I need the array in Tree format. Root directory is category name which index is Zero(0). Then after all sub directories in root directory. Kindly help me to create a tree array in PHP.

my array is given.

$array = array
(
    array(array('category_id'=>1,'parent'=>0,'category'=>'General')),
    array(
        array('category_id'=>5,'parent'=>4,'category'=>'sds'),
        array('category_id'=>4,'parent'=>1,'category'=>'ssaas'),
        array('category_id'=>1,'parent'=>0,'category'=>'General'),
    ),
    array(array('category_id'=>3,'parent'=>0,'category'=>'SOP')),
    array(
        array('category_id'=>4,'parent'=>1,'category'=>'ssaas'),
        array('category_id'=>1,'parent'=>0,'category'=>'General'),
    ),
    array(array('category_id'=>2,'parent'=>0,'category'=>'Test')),
);

Result array is

$array =    array(
    array(
        'category_id'=>1,
        'parent'=>0,
        'category'=>'General',
        'child' => array(
                'category_id'=>4,
                'parent'=>1,
                'category'=>'ssaas',
                'child' => array(
                            'category_id'=>4,
                            'parent'=>1,
                            'category'=>'sds',
                                ),
    ),
    ),
     array(
            'category_id'=>2,
            'parent'=>0,
            'category'=>'Test',
         ),
     array(
            'category_id'=>3,
            'parent'=>0,
            'category'=>'SOP',
    ),
);
  • 写回答

2条回答 默认 最新

  • dongpan5289 2018-10-31 07:55
    关注

    You can flat -> sort by parent -> then make a tree out of your original array:

    $array = array
    (
        array(array('category_id'=>1,'parent'=>0,'category'=>'General')),
        array(
            array('category_id'=>5,'parent'=>4,'category'=>'sds'),
            array('category_id'=>4,'parent'=>1,'category'=>'ssaas'),
            array('category_id'=>1,'parent'=>0,'category'=>'General'),
        ),
        array(array('category_id'=>3,'parent'=>0,'category'=>'SOP')),
        array(
            array('category_id'=>4,'parent'=>1,'category'=>'ssaas'),
            array('category_id'=>1,'parent'=>0,'category'=>'General'),
        ),
        array(array('category_id'=>2,'parent'=>0,'category'=>'Test')),
    );
    echo '---Original Array---';
    echo "<pre>"; print_r($array); echo "</pre>";
    
    $tree = array();
    
    // flat
    foreach($array as $leaves) 
    {
        foreach($leaves as $leaf) {
            $tree[$leaf['category_id']] = $leaf;
        }
    }
    
    //sort by parent
    uasort($tree, 'parentSort');
    function parentSort($a, $b) {
        if($a['parent'] == $b['parent']) {
            return 0;
        }
        return ($a['parent'] > $b['parent']) ? -1 : 1;
    }
    echo '---Flat Array---';
    echo "<pre>"; print_r($tree); echo "</pre>";
    
    // order
    foreach($tree as $leaf)
    {
        if ($leaf['parent'] != 0) {
    
            $tree[$leaf['parent']]['child'][] = $tree[$leaf['category_id']];
            unset($tree[$leaf['category_id']]);
        }
    }
    
    //sort back by parent
    ksort($tree);
    
    echo '---Tree Array---';
    echo "<pre>"; print_r($tree); echo "</pre>";
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题