php - 用于从分层数组生成平面(但带有嵌套标题)数组的递归函数

标签 php recursion

又一个递归问题。

过去几个小时我尝试开发的是一个函数,它可以让我生成相同页面的平面数组,但子页面前面有一个标识符(即“—子页面, ——子子页面等”)。

我有一个页面的分层数组,每个子页面都嵌套在其父页面内。以下是他们的输出示例:

Array
(
    [0] => Array
        (
            [id] => 1
            [parent_id] => 0
            [title] => Parent Page
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 12
                            [parent_id] => 1
                            [title] => Another Sub Page
                        )

                    [1] => Array
                        (
                            [id] => 3
                            [parent_id] => 1
                            [title] => Sub Page
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 7
                                            [parent_id] => 3
                                            [title] => Sub Sub Page
                                        )

                                )

                        )

                )

        )

    [1] => Array
        (
            [id] => 8
            [parent_id] => 0
            [title] => Another Parent Page
        )

)

我一直能够让它工作,直到我到达递归的第二级,然后它仍然只生成一个。我想让解决方案递归。

我在使用上面的示例的最终输出中寻找的是:

Array
(
    [1] => Parent Page
    [12] => — Another Sub Page
    [3] => — Sub Page
    [7] => — — Sub Sub Page
    [8] => Another Parent Page
)

最佳答案

function generate_array(array $arr, &$output = array(), $index = 0)
{
    foreach($arr as $item)
    {
        $output[$item['id']] = str_repeat('— ', $index) . $item['title'];
        if(isset($item['children']))
        {
            generate_array($item['children'], $output, $index + 1);
        }
    }
    return $output;
}

$output = generate_array($arr);

存储在$output中的数据将是:

Array
(
    [1] =>  Parent Page
    [12] => — Another Sub Page
    [3] => — Sub Page
    [7] => — — Sub Sub Page
    [8] =>  Another Parent Page
)

关于php - 用于从分层数组生成平面(但带有嵌套标题)数组的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8610606/

相关文章:

php - 从别名命名空间中的字符串名称创建新的类实例

PHP 按日期排序数组?

php - 如何避免php函数中位置参数的缺点?

php - 在 PHP 中按键搜索多维数组

sql - 没有父/子关系的递归实体

php - array_walk_recursive 与数组?

javascript - 使用 URL 哈希删除特定 div 上的事件类

php - mysqli_connect() : (HY000/2003): Can't connect to MySQL server on 'domain name' (111)

python - 递归子生成器调用不执行

Python Pandas 数据框填充父子级的层次结构