Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] [mysql] Drzewo, Jak stworzyć drzewo gdy taka tabela
kkriss
post 21.08.2006, 11:18:30
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 2.05.2005

Ostrzeżenie: (0%)
-----


Witam
Mam sobie tabelą MYSQL np z takimi danymi


poz1 poz2
0 123
123 124
0 125
125 126
125 127

I teraz chodzi aby zrobić taki skrypt który to uporządkuje na postać drzewa wyświetlając np tak:

Aby zrobić z tego drzewo
0
| - 123 - 124
| - 125 - 126
-------| - 127

Może ktoś zapodać jaakieś tematy z którymi powinienem się zapoznać aby to zrobić?
Ewentualnie może ktoś ma dokładny przykład.
Pozdrawiam

Ten post edytował kkriss 21.08.2006, 11:23:32
Go to the top of the page
+Quote Post
Ludvik
post 21.08.2006, 11:35:43
Post #2





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


To nie jest takie trudne. Musisz mieć tylko pobrać dane i posiadać odpowiednią klasę. Przydał by się też rekursywny iterator, albo funkcja do tego...

Prosta klasa, której nie sprawdzałem. Ważne, żebyś załapał o co chodzi...
  1. <?php
  2. class ID {
  3. public function __construct($iId) {
  4. $this->id = $iId;
  5. }
  6.  
  7. public function addChild(ID $child) {
  8. if (isset($this->id[$child->getId()])) {
  9. throw new Exception();
  10. }
  11. $this->children[$child->getId()] = $child;
  12. }
  13.  
  14. public function getChild($iId) {
  15. return isset($this->children[$iId]) ? $this->children[$iId] : null;
  16. }
  17.  
  18. public function getChildren() {
  19. return $this->children;
  20. }
  21.  
  22. protected $id;
  23. protected $children = array();
  24. }
  25. ?>


Dane pobierasz tak:
  1. <?php
  2. $idList = array(=> new Id(0));
  3. $parents = array();
  4. $result = mysql_query('SELECT * FROM tabela');
  5. while ($row = mysql_fetch_assoc($result)) {
  6. if (!isset($idList[$row['poz1']])) {
  7. $idList[$row['poz1']] = new Id($row['poz1']);
  8. }
  9. if (!isset($idList[$row['poz2']])) {
  10. $idList[$row['poz2']] = new Id($row['poz2']);
  11. }
  12. $parents[$row['poz2']] = $row['poz1'];
  13. }
  14.  
  15. foreach ($parents as $child => $parent) {
  16. $idList[$parent]->addChild($idList[$child]);
  17. }
  18. ?>


Wyświetlanie najlepiej w postaci rekursywnego iteratora albo funkcji rekursywnej...


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 01:57