Как преобразовать массив с определенной структурой в массив с древовидной структурой? - PullRequest
0 голосов
/ 31 октября 2018

Я хочу создать массив деревьев из многомерного массива. Я хочу создать структуру каталогов, поэтому мне нужен массив в формате дерева. Корневой каталог - это имя категории, индекс которой равен нулю (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',
    ),
);

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Вы можете выровнять -> отсортировать по родителю -> затем сделать дерево из вашего исходного массива:

<code>$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 "
"; $ tree = array (); // плоский foreach ($ массив как $ листья) { foreach ($ уходит как $ leaf) { $ tree [$ leaf ['category_id']] = $ leaf; } } // сортировка по родителю uasort ($ tree, 'parentSort'); function parentSort ($ a, $ b) { if ($ a ['parent'] == $ b ['parent']) { вернуть 0; } return ($ a ['parent']> $ b ['parent'])? -1: 1; } echo '--- Flat Array ---'; echo "
"; print_r($tree); echo "
"; // порядок foreach ($ tree как $ leaf) { if ($ leaf ['parent']! = 0) { $ tree [$ leaf ['parent']] ['child'] [] = $ tree [$ leaf ['category_id']]; снято с охраной ($ дерева [$ листа [ 'category_id']]); } } // сортировка по родителю ksort ($ дерево); echo '--- Tree Array ---'; echo "
"; print_r($tree); echo "
";
0 голосов
/ 31 октября 2018
$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().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...