如何在php中创建递归函数?

时间:2017-03-02 03:19:19

标签: php function recursion

我正在尝试构建一个呈现嵌套注释的评论系统。这个功能对我有用。但是,我无法弄清楚在哪里以及如何“返回”数据,因为我不想回应这个div。

我正在使用的数组是多维的,其中“child”包含嵌套的注释。

function display_comments($commentsArr, $level = 0) {

  foreach ($commentsArr as $info) {

    $widthInPx = ($level + 1) * 30;

    echo '<div style="width:' . $widthInPx . '"></div>';

    if (!empty($info['childs'])) {
        display_comments($info['childs'], $level + 1);
    }

  }
}

1 个答案:

答案 0 :(得分:0)

你只需要将$ result作为参数传递给函数,然后一点一点地添加它。

UPD :我已经根据您的回复略微调整了该功能的代码。请参考此示例:

$commentsArr = [
    [
        'text' => 'commentText1',
        'childs' => [
            [
                'text' => 'commentTextC1'
            ],
            [
                'text' => 'commentTextC2'
            ],
            [
                'text' => 'commentTextC3',
                'childs' => [
                    [
                        'text' => 'commentTextC3.1'
                    ],
                    [
                        'text' => 'commentTextC3.2'
                    ],
                ]
            ],
        ]
    ],
    [
        'text' => 'commentText2'
    ]
];


function display_comments($commentsArr, $level = 0, $result = ['html' => ''])
{
    foreach ($commentsArr as $commentInfo) {
        $widthInPx = ($level + 1) * 30;
        $result['html'] .= '<div data-test="' . $widthInPx . '">'.$commentInfo['text'].'</div>';
        if (!empty($commentInfo['childs'])) {
            $result = display_comments($commentInfo['childs'], $level + 1, $result);
        }
    }
    return $result;
}