получение дочернего дерева из основного дерева php - PullRequest
1 голос
/ 21 февраля 2020

Я создал дерево из плоского php массива. Теперь я хочу получить дочернее дерево из основного дерева, я хочу передать дочерний идентификатор и получить дерево дочернего элемента

$flat = [
    ['id' => 100, 'parent_id' => 0, 'name' => 'root'],
    ['id' => 101, 'parent_id' => 100, 'name' => 'ch-1'],
    ['id' => 102, 'parent_id' => 101, 'name' => 'ch-1-1'],
    ['id' => 103, 'parent_id' => 101, 'name' => 'ch-1-2'],
    ['id' => 104, 'parent_id' => 101, 'name' => 'ch-1-2'],
    ['id' => 105, 'parent_id' => 104, 'name' => 'ch-1-2'],
    ['id' => 106, 'parent_id' => 101, 'name' => 'ch-1-2'],
    ['id' => 107, 'parent_id' => 101, 'name' => 'ch-1-2'],
];

$tree = getchildtree($flat, '101');
print_r($tree);

Ответы [ 2 ]

1 голос
/ 21 февраля 2020
<?php
$flat = [
    ['id' => 100, 'parent_id' => 0, 'name' => 'root'],
    ['id' => 101, 'parent_id' => 100, 'name' => 'ch-1'],
    ['id' => 102, 'parent_id' => 101, 'name' => 'ch-1-1'],
    ['id' => 103, 'parent_id' => 101, 'name' => 'ch-1-2'],
    ['id' => 104, 'parent_id' => 101, 'name' => 'ch-1-2'],
    ['id' => 105, 'parent_id' => 104, 'name' => 'ch-1-2'],
    ['id' => 106, 'parent_id' => 101, 'name' => 'ch-1-2'],
    ['id' => 107, 'parent_id' => 101, 'name' => 'ch-1-2'],
];

$index = array_search(101, array_column($flat, 'parent_id'));

var_dump($flat[$index]);

?>

Мысль:

Поскольку вы сами строите массив, почему бы вам не рассмотреть структуру, похожую на

$flat[$parent_id][] = [
   'id' => $child_id,
   'name' => $child_name
];

Тогда вы можете получить ребенка дерево (и) из основного дерева следующим образом

$child_tree = $flat[$parent_id];
1 голос
/ 21 февраля 2020
<?php

$flat = [
    ['id' => 100, 'parent_id' => 0, 'name' => 'root'],
    ['id' => 101, 'parent_id' => 100, 'name' => 'ch-1'],
    ['id' => 102, 'parent_id' => 101, 'name' => 'ch-1-1'],
    ['id' => 103, 'parent_id' => 101, 'name' => 'ch-1-2'],
    ['id' => 104, 'parent_id' => 101, 'name' => 'ch-1-2'],
    ['id' => 105, 'parent_id' => 104, 'name' => 'ch-1-2'],
    ['id' => 106, 'parent_id' => 101, 'name' => 'ch-1-2'],
    ['id' => 107, 'parent_id' => 101, 'name' => 'ch-1-2'],
];

$index = array_search($user_id, array_column($data, 'id'));
$new = array();
foreach ($flat as $a){
    $new[$a['parent_id']][] = $a;
}
$tree = createTree($new, array($data[$index]));
print_r($tree);

function createTree(&$list, $parent){
    $tree = array();
    foreach ($parent as $k=>$l){
        if(isset($list[$l['id']])){
            $l['children'] = createTree($list, $list[$l['id']]);
        }
        $tree[] = $l;
    } 
    return $tree;
}

проверить демо

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