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

查看:370
本文介绍了php - 怎么递归获取文章所有的评论???的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

表结构:

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
            ),
            ........
        )
    )
);

解决方案

  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;
}

这篇关于php - 怎么递归获取文章所有的评论???的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆