Добавление префикса ‘& gt;’ из моего массива дерева

Array
(
[0] => Array
(
[id] => 39
[parent_id] => 0
[sku] => Parent
)

[1] => Array
(
[id] => 40
[parent_id] => 39
[sku] => Child of parent id 39
)

[2] => Array
(
[id] => 41
[parent_id] => 40
[sku] => Child of child id 40
)

[3] => Array
(
[id] => 42
[parent_id] => 40
[sku] => Another child of child id 40
)

[4] => Array
(
[id] => 43
[parent_id] => 39
[sku] => Another child of parent id 39
)
etc..
)

У меня здесь есть ассоциативные массивы, которые в основном являются отношениями родитель-ребенок. В сети было так много примеров того, как построить дерево, которое мне очень помогло. Но сейчас я просто хочу отформатировать мой массив примерно так:

> Parent                               --> first prefix ">">> Child of parent id 39           --> added two ">" prefixes
>>> Child of child id 40       --> added three ">" prefixes
>>> Another child of child id 40
>> Another child of parent id 39
and so on..

Обновить:
Вот как я сейчас строю свое дерево:

function pdf_content($data, $parentId = 0)
{
$str = '';

foreach ($data as $row) {
if ($row['parent_id'] == $parentId) {
$str .= '<li>';
$str .= $row['sku'];
$str .= pdf_content($data, $row['id']);
$str .= '</li>';
}
}

if ($str) {
$str = "<ol class='dashed'>" . $str . '</ol>';
}
return $str;
}
// this is using the ol list style.

Поэтому сначала дети должны получить его родителя и добавить префикс «>». У меня уже есть код для построения дерева, но форматирование его примерно так заставило меня застрять в дереве.

2

Решение

Я думаю, что это должно сделать это.

function pdf_content($items, $parentId = 0, $prefix = '>')
{
$str = '';
foreach ($items as $item)
{
if ($item['parent_id'] == $parentId) {
$str .= '<li>';
$str .= $prefix.$item['sku'];
$str .= pdf_content($items, $item['id'], $prefix.'>');
$str .= '</li>';
}
}
if ($str) {
$str = "<ol class='dashed'>" . $str . '</ol>';
}
return $str;
}

$string = pdf_content($array);

Это то, что я получаю в качестве выхода —

>Parent
>>Parent 39
>>>Parent 40
>>>Parent 40
>>Parent 39
1

Другие решения

Для добавления префикса используйте рекурсивную функцию с параметром передачи $prefix = '>' если ребенок найден, то конкатинатировать $prefix .= '>' и передайте свою функцию, если ребенок не найден, перезапишите $prefix = '>' только

1

По вопросам рекламы [email protected]