Porządkowanie komentarzy w hierarchi

0

Od kilku dni męczę się z takim problemem (moduł komentarzy z wielopoziomowymi komentarzami).
Mam na wejściu tablicę (zapisałem w php):
X[] = array(
'tresc' => $treść,
'id' => $id,
'sub_id' => $sub_id);
gdzie 'id' jest kolejnym identyfikatorem, a 'sub_id' jest identyfikatorem opinii, do której odpowiedzią jest dany komentarz. Jeżeli jest najwyżej hierarchii, to sub_id = -1.

Może ktoś pomóc przy stworzeniu algorytmu w pseudokodzie (a najoptymalniej kodu w php), który by porządkował tablicę w takiej hierarchii:
1.
1.1.
1.1.1.
1.1.2.
1.2.
1.3.
1.3.1.
1.3.1.1.
1.3.1.2.
1.3.1.2.1
1.3.2.
Operując oczywiście na wymienionej tablicy (id, sub_id).
Męczyłem się kilkadziesiąt godzin (z najlepszym wynikiem - poprawna kolejność do 3-go poziomu) i błagam o pomoc, za którą z góry dziękuję.

1

Nudziło mi się i chciałem sobie przypomnieć PHP.

http://ja.revciu.pl/pub/4p/202609-porzadkowanie_komentarzy_w_hierarchi/

http://ja.revciu.pl/pub/4p/202609-porzadkowanie_komentarzy_w_hierarchi/?source

class CommentsTree
{
	const TOP_SUB_ID_LEVEL = -1;
	
	private $_comments = array();
	
	public function SetComments(&$comments) {
		$this->_comments = $comments;
	}
	
	private function FindDescendants($to) {
		return array_filter($this->_comments, function($comment) use ($to) { // closures in PHP :o
			return $comment['sub_id'] === $to;
		});
	}
	
	private function PrintComment($comment, $level) {
		print str_repeat("\t", $level) . $comment['id'] . ' -> ' . $comment['sub_id'] . "\n";
	}
	
	private function PrintSubTree($parent_id, $level) {
		foreach($this->FindDescendants($parent_id) as $comment) {
			$this->PrintComment($comment, $level);
			$this->PrintSubTree($comment['id'], $level + 1);
		}
	}
	
	public function __construct(&$comments) {
		$this->SetComments($comments);
	}
	
	public function PrintTree() {
		$this->PrintSubTree(self::TOP_SUB_ID_LEVEL, 0);
	}
}
0

Rev - jesteś boski!
Już sobie odinstalowywuję Googla :)
Wielkie dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1