【问题标题】:How to transform specific-structured array into a "tree"-structured array?如何将特定结构数组转换为“树”结构数组?
【发布时间】:2019-04-04 07:09:04
【问题描述】:

我想从多维数组创建一个树数组。我想创建一个目录结构,所以我需要 Tree 格式的数组。 根目录是索引为零(0)的类别名称。 然后在根目录中的所有子目录之后。 请帮我在 PHP 中创建一个树数组。

我的数组给定了。

$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')),
);

结果数组是

$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',
    ),
);

【问题讨论】:

  • 显示你想要的结果数组。您尝试获取什么代码?

标签: php arrays tree


【解决方案1】:
$arr = [];
$g_pa = ['name' => 'grandpa'];
$dad = ['name' => 'dad'];
$son = ['name' => 'son']
$another_g_pa = ['name' => 'another_grandpa'];

$dad['child'] = $son;
$g_pa['child'] = $dad;
$arr = [$g_pa, $another_g_pa];

所以,这里是爷爷的排列,爸爸的孩子是儿子,爸爸是爷爷的孩子。对于短代码使用[],而不是array()

【讨论】:

    【解决方案2】:

    你可以平 -> 按父排序 -> 然后从你的原始数组中创建一棵树:

    $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>";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2015-06-22
      • 2022-08-04
      • 2020-03-21
      相关资源
      最近更新 更多