@Andriii8778

Как написать рекурсию стены сообщений?

Вывод сообщений в виде дерева. Есть 2 массива. ($messages - сообщения, $comments- комментарии к сообщениям и комментарии к комментариям) Если бы было только сообщения и комментарии к ним. Тут просто foreach с условиями и все просто. А нужно еще комментарии к комментариям и тд. Без рекурсии не как. С простыми рекурсиями все понятно, а написать такую опыта нету, да и мозгов походу. Может кто что то подсказать. Или кто то подобное делал.
  • Вопрос задан
  • 200 просмотров
Пригласить эксперта
Ответы на вопрос 2
@htmldeveloper
на пхп не смогу написать, просто на словах:
это всего лишь одна функция. есть объект "сообщение", у него "комментарии". вот "комментарии" и прокидывается в эту функцию первым аргументом, вторым - уровень вложенности например (изначально ноль). У "комментарии" есть внутренний массив "комментарии", и если он не пустой - то вызывается эта же самая функция таким же образом, только уровень вложенности итерируется на единичку.

может пример на js поможет? )

const message = {
  title: 'bla bla',
  comments: [
    {
      text: 'comment1',
      comments: [
        {
          text: 'comment2',
          comments: [],
        },
        {
          text: 'comment3',
          comments: [
            {
              text: 'comment4',
              comments: [],
            },
          ],
        },
      ],
    },
    {
      text: 'comment5',
      comments: [],
    },
  ],
};

function renderComments(comments, level = 1) {
  if (!comments || !comments.length) {
    return;
  }

  comments.forEach(comment => {
    console.log('>'.repeat(level), comment.text);
    renderComments(comment.comments, ++level);
  });
};

renderComments(message.comments)
Ответ написан
Комментировать
@slavabars
Веб программист
Поле родитель сделай и пиши родителя комментария.
Потом функция рекурсии которая проверяет есть ли сообщения в поле родителя стоит ид этого сообщения. И так с каждым вложенным сообщением
message($id);

function message($id){
     /* получаем сообщение, возвращаем id сообщения в бд*/
     echo сообщение;
     /*select ид родителя = ид с базы сообщения*/
     foreach (найденные сообщения){
          message(id):
     }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы