添加前缀'>'从我的数组树

时间:2016-03-04 08:19:44

标签: php arrays laravel tree treeview

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.

首先,孩子们必须得到它的父母并附加前缀“&gt;”。我已经有了一个代码来构建一个树,但是将它格式化为这样的东西让我卡在一棵树上。

2 个答案:

答案 0 :(得分:1)

要添加前缀,请使用带参数$prefix = '>'的递归函数(如果已找到子项)然后合并$prefix .= '>'并传入您的函数(如果未找到子项),则仅覆盖$prefix = '>'

答案 1 :(得分:1)

我认为应该这样做。

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