Mam następującą tablicę (ID, IDRodzica, Tekst):
t = array(
(0, -1, 'Tekst0'),
(1, 0, 'Tekst1'),
(2, 1, 'Tekst2'),
(3, -1, 'Tekst3'),
(4, 3, 'Tekst4'),
(5, 3, 'Tekst5')
);
To uproszczony przykład, ale elementów ma być około tysiąca. Potrzebuję znaleźć jak najszybszy (dlatego pytam właśnie!) algorytm, by przekształcić to na tablicę, jak poniżej. IDRodzica = -1 oznacza, że element jest głównym w drzewie (nie jest podelementem innego).
t = array(
( 0, -1, 'Tekst0', array((1, 0, 'Tekst1', array((2, 1, 'Tekst2', array())))) ),
( 3, -1, 'Tekst3', array((4, 3, 'Tekst4', array()), (5, 3, 'Tekst5',array())) )
);
Każdy element ma w ostatnim parametrze tablicę (choćby pustą) elementów, które mają ustawione IDRodzica, na jego ID. Tych podelementów może być wiele (kolejność dowolna) albo zero. Podelementy też moga posiadać podelementy.
Podkreślam, że zależy mi na szybkości. Przekształcenie potrzebuję, aby dane zaprezentować użytkownikowi graficznie właśnie w formie drzewa.
Obecnie kod jest rozbudowany (więc wklejał nie będę). Działa w taki sposób:
Bierze z tablicy wejściowej element i przegląda wyjściową tablicę elementów, ich tablice podelementów, itd (rekurencyjnie). Jeśli znajdzie element wyjściowy o ID równym jego IDRodzica, element wejściowy daje jako jego podelement. Jak przejdzie całą tablicę wyjściową i nie znajdzie, element dodaje jako nowy główny. (Nie istnieje element o ID = -1, więc taki element wejściowy zawse będzie dodany jako główny na wyjściu). Przy dużej liczbie elementów może to trwać bardzo długo.. za długo.