Мне нужно отсортировать массив объектов для программы форума с несколькими сравнениями. Каждый пост (основная тема или ответ) является экземпляром класса Post. Мне нужно отсортировать основные потоки по их свойству timeLastChanged (для поднятия), а затем отсортировать ответы под ними по их свойству timeStarted (сначала самое старое). Моя цель состояла в том, чтобы отсортировать массив в том порядке, в котором он будет отображаться в таблице форума. Просто сортируется и отображается так:
- Main thread
- Reply
- Reply
- Reply
- Reply
- Reply
- Reply
- Main thread
и т.д.
Я смотрел на usort и тому подобное, но я не могу понять, как функции сравнения будут работать для этого. Да, и у каждого объекта есть свойство isReply, которое устанавливается в 0, если оно не является ответом, и устанавливается в идентификатор потока сообщения, на которое он является ответом, если это ответ. Каждый объект имеет свойство TID, которое является его идентификатором потока (уникальным). У меня также есть свойство numReplies, которое показывает, сколько прямых ответов содержится в сообщении (и тогда, конечно, ответы будут иметь свои собственные numReplies, которые показывают, сколько ответов назначено этому ответу и т. Д.).
У меня есть отображаемая часть и получение информации из базы данных, я просто не уверен в наиболее эффективном способе ее сортировки. Спасибо за любую помощь.
Изменить: вот код, который у меня есть, который запускает класс, я исключил часть, где я беру данные из базы данных, но просто знаю, что все применимые экземпляры Post назначены их соответствующему массиву объектов (ответы в replyObjs сеть находится в mainsObjs и т. д.):
class Category {
public $title;
public $majCatID;
public $catID;
public $modLevel;
public $postingLevel;
public $hostedByUID;
public $order;
public $shortName;
public $info;
public $stickyObjs;
public $mainsObjs;
public $replyObjs;
public $orderedObjs;
private $database;
public function __construct($catID) {
$this->database = new TBDatabase;
$result = $this->database->getIntRow(CAT_TABLE, 'catID', $catID);
$row = $this->database->fetchAssoc($result);
$this->title = $row['title'];
$this->majCatID = $row['majCatID'];
$this->catID = $row['catID'];
$this->modLevel = $row['modLevel'];
$this->postingLevel = $row['postingLevel'];
$this->hostedByUID = $row['hostedByUID'];
$this->order = $row['order'];
$this->shortName = $row['shortName'];
$this->info = $row['info'];
}
public function sortPosts() {
$table = $this->shortName."_threads";
$this->getStickyObjs();
$numStickies = count($this->stickyObjs);
$this->getMainObjs();
$numMains = count($this->mainsObjs);
$this->getReplyObjs();
$numReplies = count($this->replyObjs);
}