Рекурсивная функция для комментирования и ответа PHP-приложения

У меня возникают трудности с концептуализацией рекурсивной функции для добавления ответов на комментарии, ответов на ответы, ответов на ответы на ответы и т. Д.

Это моя таблица комментариев:

КоторыйДОЛЖЕН выглядеть примерно так при рендеринге:

В его нынешнем виде я могу отобразить каждый комментарий, связанный с article_id (исключая те, которыеNOT NULL, конечно):

$comments = $commentClass->fetch_article_comments($article_id);

foreach($comments as $comment) {

        $comment_id = $comment['comment_id'];   
        $member_id = $comment['member_id'];
        $comment_text = $comment['comment_text'];
        $comment_timestamp = timeAgo($comment['comment_timestamp']);  //get time ago

        //render comment using above variables
    }

Сейчас я'м, если мне нужно добавить рекурсивную функцию в конце вышеупомянутогоforeach заявление, но мне еще предстоит придумать что-нибудь удачно в добавлении комментариев ответы и ответы на каждый ответ.

Может ли кто-нибудь помочь мне достичь этого или, возможно, указать мне правильное направление. Я не совсем знаком с рекурсивными функциями. Я сделал некоторое сканирование в Интернете и в стеке потока, ища что-то, что помогает, но непока не нашел ничего полезного.

Я сталкивалсяэта почта который рекомендовал использовать иерархическую систему баз данных, но я думаю, что я бы предпочел использовать рекурсивную функцию php для этого.

Благодарю.

редактировать

Используя приведенные ниже ответы, я только сначала возвращаю комментарий к результатам, а затем он повторяется и отображает этот комментарий в течение неопределенного времени. Я могу'не понимаю, почему?

Мой php:

function display_comments($article_id, $parent_id=0, $level=0) {
    global $comment;
    global $member;
    global $signed_in;
    global $username;

    $comments = $comment->fetch_article_comments($article_id, $parent_id);

    foreach($comments as $data) {
        $comment_id = $data['comment_id'];   
        $c_member_id = $data['member_id'];
        $comment_text = $data['comment_text'];
        $comment_timestamp = timeAgo($data['comment_timestamp']);  //get time ago

        $member_data = $member->fetch_member_data($c_member_id);
        $c_member_username = $member_data['member_username'];
        $c_member_avatar = $member_data['member_avatar'];

                //render HTML here

                $parent = $data['comment_parent'];
                display_comments($article_id, $parent, $level+1);

    }//end foreach

}//end display_comments()

и мой запрос PDO:

public function fetch_article_comments($article_id, $parent_id) { //$page = (int)(!isset($_GET['page'])) ? 0 : $_GET['page'];

    if ($parent_id > 0) {
        $parent_id = "= $parent_id";
    } else {
        $parent_id = "IS NULL";
    }

    $query = $this->db->prepare("SELECT * FROM `comments2` WHERE `article_id` = $article_id AND `comment_parent` $parent_id ORDER BY `comment_timestamp` DESC");

    try{
        $query->execute();
        $comments = $query->fetchAll();                                     //returns an array
        $query->closeCursor();

        return $comments;

    } catch(PDOException $e){
        die($e->getMessage());
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос