чат / сообщения PHP путаница цикла foreach - PullRequest
2 голосов
/ 09 июня 2011

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

В основном я думал, что мне нужны следующие 5 переменных: user_id, recipient_id, message_id, reply_id и message.

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

Вот то, что я пока имею, что только повторяет ответы пользователя, а не его сообщенияни вложенные в свои сообщения:

<?php foreach($messages as $message)
{
    $msg_id=$message->message_id;
    $rply_id=$message->reply_id;
    if($msg_id=$rply_id)
    {
        echo $message->message;
    }
}
?>

1 Ответ

1 голос
/ 09 июня 2011

Вот как я бы это сделал:

Форматирование данных, извлеченных из базы данных, в базовый массив с индексом id и массив с индексом внешнего ключа

  • Извлечь все сообщения из базы данных, которые НЕ являются ответами, упорядочить по дате.

  • Индексировать результирующий массив по идентификатору сообщения.

  • Извлечь всесообщения из базы данных, которые являются ответами, упорядочены по дате.

  • Зацикливание ответов, помещая их в новый многомерный массив, сгруппированный по response_id.

Форматирование вывода

Цикл Foreach над сообщениями без ответа:

  • Отображение каждого сообщения.

  • Извлечениеидентификатор каждого сообщения и проверьте, является ли он ключом в массиве ответов.

  • Если он присутствует в массиве ответов ...

    • Foreachцикл для отображения каждого присутствующего ответного сообщения.

Конец цикла foreach сообщения.

...