怎么递归获取文章所有的评论???

表结构:

comment_id  评论ID
arc_id      文章ID
content     内容
parent_id   评论父节点

想要递归得到这样的数据结构:

$arr = array(
    [0] => array(
        comment_id => 1,
        parent_id  => 0,
        ['child']  => array(
            [0] => array(
                comment_id => 2
                parent_id  => 1
            ),
            [1] => array(
                comment_id => 3
                parent_id  => 2
            ),
            [2] => array(
                comment_id => 4
                parent_id  => 1
            ),
            ........
        )
    ),
    [1] => array(
        comment_id => 5,
        parent_id  => 0,
        ['child']  => array(
            [0] => array(
                comment_id => 6
                parent_id  => 5
            ),
            [1] => array(
                comment_id => 7
                parent_id  => 5
            ),
            [2] => array(
                comment_id => 8
                parent_id  => 7
            ),
            ........
        )
    )
);
阅读 3.4k
2 个回答
  1. 先取出一个二维数组,其中每一项带有comment_idparent_id字段

  2. 然后使用下面的函数,将上面的二维数组转成树形结构:

<?php
$arr = [
    ['comment_id' => 1, 'parent_id' => 0],
    ['comment_id' => 2, 'parent_id' => 0],
    ['comment_id' => 3, 'parent_id' => 2],
    ['comment_id' => 4, 'parent_id' => 1],
    ['comment_id' => 5, 'parent_id' => 4],
    ['comment_id' => 6, 'parent_id' => 4],
];

function getTree($arr = []) {
    $arr = array_column($arr, NULL, 'comment_id');
    $tree = [];

    foreach($arr as $i => &$v) {
        if(isset($items[$item['parent_id']])){
            $items[$item['parent_id']]['children'][] = &$items[$item['comment_id']];
        } else {
            $tree[] = &$items[$item['id']];
        }
    }

    return $tree;
}
新手上路,请多包涵

$items哪里的?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题