У меня есть массив категорий, который выглядит как-тоПостроить иерархический список из массива
array(
array(
'id' => '1',
'path' => '1',
'children_count' => '16',
'name' => 'A'
),
array(
'id' => '3',
'path' => '1/2/3',
'children_count' => '0',
'name' => 'C'
),
array(
'id' => '2',
'path' => '1/2',
'children_count' => '9',
'name' => 'B'
),
array(
'id' => '4',
'path' => '1/2/4',
'children_count' => '0',
'name' => 'D'
)
)
То, что я пытаюсь построить это иерархический массив (ключ path
показывает соотношение основанного на id
), поэтому вывод находится в правильном порядке (сначала родитель корня, потом дети, потом больше детей) и отступ name
, основанный на том, как далеко внизу находится ребенок. Конечный результат должен выглядеть примерно так:
A
-B
--C
--D
Вот что я до сих пор, но это, очевидно, не работает
$categoryTree = array();
foreach ($categories as $category) {
$categoryTree[(string)$category['path']] = str_repeat("-", substr_count($category['path'], "/")) . $category['name'];
}
ksort($categoryTree);
var_export($categoryTree);
который выходит на:
array (
'1/2' => '-B',
'1/2/3' => '--C',
'1/2/4' => '--D',
1 => 'A'
)
Как я могу получить они в правильном порядке? (и если братьев и сестер можно было бы заказать по id
, которые также были бы денди)
Включите эту группу в одну и ту же часть иерархии? Например. если у вас 1/2, 1/5, 1/2/3, 1/2/4, 1/5/6, 1/5/7. – Barmar
Да, разве это не предполагаемый выход? (1/2, 1/2/3, 1/2/4, 1/5 ...) –
Извините, неправильно прочитайте, что вы сортировали. – Barmar