Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Proste drzewko ... ale jak zrobić?
Forum PHP.pl > Forum > PHP
Gligamesh
Witam

chce stworzyć proste drzewo:

grupa 1
- podmiot1
- podmiot1
- podmiot1
grupa2
- podmiot2
- podmiot2

etc.

ma to być szybkie i łatwe w edycji, na początek zrobiłem cos takiego

  1. <?php
  2. $userzy = array(
  3. 'grupa1' => array('user1','user2'), 
  4. 'grupa2' => array('user3')
  5. );
  6.  
  7.  
  8. foreach($userzy as $nazwa => $grupa)
  9. {
  10. echo $nazwa;
  11. foreach($grupa as $user)
  12. echo $user;
  13. }
  14. ?>


sa to moje pierwsze kroki z "takim czortem" więc problem pojawił sie gdy chciałem dodać drugą wartość (czyli podmiot 1 wartosc1) do podmiotu, inaczej mówiąc jak mam to zrobić ? i czy dobrze to robie (może sa lepsze sposoby).
domis86
hmmm, co to ma byc? do czego ma sluzyc?
Gligamesh
podmiot1 - nazwa
wartosc1 - link dla nazwy

Ma to być coś w stylu menu, do użytku wewnętrznego.
Cienki1980
Jeżeli masz dostęp do bazy danych ( jakiejkolwiek ) zrób to na bazie. Jedna tabela wystarczy do obsłużenia wielopoziomowego drzewka, a będziesz mógł dla każdego poziomu podefiniować tyle wartości ile będziesz chciał.
domis86
hmmm, chyba problem tkwi w tym ze nie wiesz co to "drzewo"

poczytaj na necie, np tu: http://pl.wikipedia.org/wiki/Drzewo_(informatyka)
Gligamesh
chodzi właśnie o to żeby nie używać bazy danych.

domis86 - najpierw sam to przeczytaj ;/
domis86
Cytat(Gligamesh @ 22.06.2007, 18:35:52 ) *
domis86 - najpierw sam to przeczytaj ;/

Synek, ja to juz dawno czytalem.
Nie masz pojecia o drzewach i chcesz je implementowac? otrząśnij się kapeczke i bez takich odzywek mi tu mad.gif
Gligamesh
menu - poziom 1 (tego nie wyświetlam) / korzeń
grupa - poziom 2 / krawędź
podmiot - poziom 3 / wierzchołek

dalej nie jest to drzewo "synku" ? cofnij sie do szkoły (albo ją skończ) na matematyce były takie rzeczy.
tiraeth
  1. <?php
  2. $aTree = array(
  3. array('id' => '0', 'title' => 'Grupa 1', 'motherid' => ''),
  4. array('id' => '1', 'title' => 'Grupa 2', 'motherid' => ''),
  5. array('id' => '3', 'title' => 'Podmiot 1-1', 'motherid' => '0'),
  6. array('id' => '4', 'title' => 'Podmiot 1-2', 'motherid' => '0'),
  7. array('id' => '5', 'title' => 'Podmiot 1-1-1', 'motherid' => '3'),
  8. array('id' => '6', 'title' => 'Podmiot 2-1', 'motherid' => '1')
  9. );
  10.  
  11. function print_tree($array, $id = '', $level = 0, $sp = '-') {
  12. foreach ( $array as $aItem ) {
  13. if ( $aItem['motherid'] == $id ) {
  14. for ( $i = 0; $i < $level; $i++ ) {
  15. $s .= $sp;
  16. }
  17. echo $s . ' ' . $aItem['title'] . '<br />';
  18.  
  19. print_tree($array, $aItem['id'], $level+1);
  20. }
  21. }
  22. }
  23.  
  24. print_tree($aTree);
  25. ?>


Masz, Zdzisio smile.gif

Result:
Kod
Grupa 1
- Podmiot 1-1
-- Podmiot 1-1-1
-- Podmiot 1-2
Grupa 2
- Podmiot 2-1


Program nie działa dokładnie, jest błąd związany z iteratorem poziomu ($level) smile.gif Popraw sobie tongue.gif Mnie się nie chce teraz sprawdzać, pisane z palca, testowałem i działa (w miarę...)
domis86
Cytat(Gligamesh @ 22.06.2007, 19:17:52 ) *
menu - poziom 1 (tego nie wyświetlam) / korzeń
grupa - poziom 2 / krawędź
podmiot - poziom 3 / wierzchołek

dalej nie jest to drzewo "synku" ? cofnij sie do szkoły (albo ją skończ) na matematyce były takie rzeczy.


  1. <?php
  2. korzen  <- wierzcholek(korzen)
  3.  | |  <-krawedzie
  4. grupa1 grupa2.......  <-wierzcholki
  5.  |  | |  <-krawedzie
  6. podmiot11 podmiot21 podmiot22  <- wierzcholki(liscie)
  7. ?>


nie klóc sie ze starszymi aarambo.gif
Gligamesh
tiraeth - dzięki sporo pomogło

domis86 -
1 a może jesteś młodszy ?
2 jesteś tak mądry że robisz same problemy...

uważaj co chcesz, dzieci neostrady jest więcej nie jesteś samotny smile.gif
domis86
nie odrozniasz krawedzi od wierzcholka wiec nie gadam z Tobą
tiraeth
domis86: Dostajesz ostrzeżenie za niekulturalne zachowanie wobec użytkownika ~Gligamesh. Zgłoś się do mnie za 1 tydzień to je zdejmę. I bez dyskusji na PW proszę, decyzje są arbitralne.

A Ty, Gligamesh, nie kłóć się, bo zrobiłeś błąd - krawędzią nie jest grupa 1, a związek relacyjny między wierzchołkami ew. wierzchołkiem a korzeniem (tak przynajmniej ja rozumiem Wikipedię).

To co Ty potrzebowałeś, to grupy zagnieżdżone, tj. grupy relacyjne (grupy, podgrupy i podpodgrupy itd.).
Gligamesh
to dobrze smile.gif

jakąś twoja wiedza nie przelewa sie na temat (pewno zbyt banalne), i jak mam odróżniać przecież to nie jest drzewo ?

z pomocą kolegi rozwiązałem problem tak.
  1. <?php
  2. class podmiot
  3. {
  4. var $link,$nazwa;
  5.  
  6. function podmiot($link,$nazwa)
  7. {
  8. $this->link = $link;
  9. $this->nazwa = $nazwa;
  10. }
  11. }
  12. $menu = array(
  13. 'grupa1' => array(
  14. new podmiot('http://link','podmiot1'), 
  15. new podmiot('http://link','podmiot1')
  16. ), 
  17. 'grupa2' => array(
  18. new podmiot('http://link2','podmiot2'), 
  19. new podmiot('http://link2','podmiot2')
  20. )
  21. );
  22.  
  23. foreach($menu as $nazwaGrupy => $grupa)
  24. {
  25. echo $nazwaGrupy;
  26. foreach($grupa as $podmiot)
  27. echo '<a href="'.$podmiot->link.'">'.$podmiot->nazwa.'</a>';
  28. }
  29. ?>



tiraeth - zapewne masz racje, jednak wiki nie czytałem (bazuje na informacji z lekcji matematyki), będę już wiedział jak to zwać (jak pisałem to moje pierwsze kroki)
tiraeth
Gligamesh: powyższe rozwiązanie jest nieelastyczne, gdyż możesz mieć tylko jeden poziom podgrup.

Właśnie przed chwilą zobaczyłem: http://forum.php.pl/index.php?showtopic=54683 lub bardziej bezpośrednio http://nospor.pl/tree.html
bartek00
Obserwuje ta cala dyskusje moge powiedziec, ze to za co Gligamesh (ff) uwaza drzewo to tak naprawde taki ulomny krzak udajacy jednopoziomowe drzewo. Domis86 nie staraj sie tak bardzo kazdemu wytykac bledy, mogl zyc w blednym przekonani, ale widze ze dobre dusze sie znalazly. Moje 3 grosze.

Pozdrawiam
Gligamesh
tak, ale zostało stworzone to właśnie z takim założeniem (nie potrzebuje więcej), dzięki za linki przydadzą się przy w innych przypadkach.

niestety nie miałem w szkole programowanie, z matematycznego poziomu widzenia przypominało mi to krzaczek to tez tak to nazwałem, uczę sie na przykładach więc często nie wiem co jak się nazywa a niestety nie mam często czasu czytać "książek"

Do elastycznych i bardziej zaawansowanych np kategorii w galerii używam czegoś takiego:

  1. CREATE TABLE `kategorie` (
  2. `id` int(1) NOT NULL AUTO_INCREMENT,
  3. `name` tinytext NOT NULL,
  4. `parent` int(1) NOT NULL,
  5. `patch` tinytext NOT NULL,
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=MyISAM;
  8.  
  9. CREATE TABLE `sub` (
  10. `id` tinyint(1) NOT NULL AUTO_INCREMENT,
  11. `tekst` tinytext NOT NULL,
  12. `kategoria` int(1) NOT NULL,
  13. PRIMARY KEY (`id`)
  14. ) ENGINE=MyISAM;


  1. <?php
  2. $sql = mysql_query("SELECT * FROM kategorie WHERE parent = '0'");
  3. echo 'kategorie głowne: <br />';
  4. while($data = mysql_fetch_array($sql))
  5. {
  6. echo '<a href="?id='.$data['id'].'">'.$data['name'].'</a>, <br />';
  7. }
  8.  
  9.  
  10.  
  11. $id = $_GET['id'];
  12. $sql = mysql_query("SELECT * FROM kategorie WHERE parent = $id");
  13. echo 'podkategorie: ';
  14. while($data = mysql_fetch_array($sql))
  15. {
  16. echo '<a href="?id='.$data['id'].'">'.$data['name'].'</a>, | ';
  17. }
  18. ?>


też nie jest to za nowe, robiłem to ponad rok temu i pewno można to jakaś ulepszyć
crashu
tez kiedys potrzebowalem stworzyc drzewko i nie majac o tym pojecia, ani nie korzystajac z zadnych pomocy doszedlem do czegos takiego link(troche tego bylo wiec wrzucilem to na cpaste:)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.