Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Proste drzewko ... ale jak zrobić?
Gligamesh
post 22.06.2007, 16:26:56
Post #1





Grupa: Zarejestrowani
Postów: 227
Pomógł: 0
Dołączył: 13.06.2003
Skąd: rykowice

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


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).

Ten post edytował Gligamesh 22.06.2007, 16:28:31
Go to the top of the page
+Quote Post
domis86
post 22.06.2007, 16:56:06
Post #2





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


hmmm, co to ma byc? do czego ma sluzyc?
Go to the top of the page
+Quote Post
Gligamesh
post 22.06.2007, 17:14:30
Post #3





Grupa: Zarejestrowani
Postów: 227
Pomógł: 0
Dołączył: 13.06.2003
Skąd: rykowice

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


podmiot1 - nazwa
wartosc1 - link dla nazwy

Ma to być coś w stylu menu, do użytku wewnętrznego.

Ten post edytował Gligamesh 22.06.2007, 17:14:43
Go to the top of the page
+Quote Post
Cienki1980
post 22.06.2007, 17:16:50
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


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ł.


--------------------
404
Go to the top of the page
+Quote Post
domis86
post 22.06.2007, 17:22:18
Post #5





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


hmmm, chyba problem tkwi w tym ze nie wiesz co to "drzewo"

poczytaj na necie, np tu: http://pl.wikipedia.org/wiki/Drzewo_(informatyka)
Go to the top of the page
+Quote Post
Gligamesh
post 22.06.2007, 17:35:52
Post #6





Grupa: Zarejestrowani
Postów: 227
Pomógł: 0
Dołączył: 13.06.2003
Skąd: rykowice

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


chodzi właśnie o to żeby nie używać bazy danych.

domis86 - najpierw sam to przeczytaj ;/

Ten post edytował Gligamesh 22.06.2007, 17:36:28
Go to the top of the page
+Quote Post
domis86
post 22.06.2007, 17:39:02
Post #7





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


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
Go to the top of the page
+Quote Post
Gligamesh
post 22.06.2007, 18:17:52
Post #8





Grupa: Zarejestrowani
Postów: 227
Pomógł: 0
Dołączył: 13.06.2003
Skąd: rykowice

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


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.

Ten post edytował Gligamesh 22.06.2007, 18:18:22
Go to the top of the page
+Quote Post
tiraeth
post 22.06.2007, 18:28:46
Post #9





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


  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ę...)
Go to the top of the page
+Quote Post
domis86
post 22.06.2007, 18:42:05
Post #10





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


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

Ten post edytował domis86 22.06.2007, 18:42:46
Go to the top of the page
+Quote Post
Gligamesh
post 22.06.2007, 18:53:14
Post #11





Grupa: Zarejestrowani
Postów: 227
Pomógł: 0
Dołączył: 13.06.2003
Skąd: rykowice

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


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

Ten post edytował Gligamesh 22.06.2007, 18:55:32
Go to the top of the page
+Quote Post
domis86
post 22.06.2007, 18:54:53
Post #12





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


nie odrozniasz krawedzi od wierzcholka wiec nie gadam z Tobą

Ten post edytował domis86 22.06.2007, 18:55:24
Go to the top of the page
+Quote Post
tiraeth
post 22.06.2007, 19:07:11
Post #13





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


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.).
Go to the top of the page
+Quote Post
Gligamesh
post 22.06.2007, 19:10:48
Post #14





Grupa: Zarejestrowani
Postów: 227
Pomógł: 0
Dołączył: 13.06.2003
Skąd: rykowice

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


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)

Ten post edytował Gligamesh 22.06.2007, 21:33:18
Go to the top of the page
+Quote Post
tiraeth
post 22.06.2007, 19:12:29
Post #15





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


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
Go to the top of the page
+Quote Post
bartek00
post 22.06.2007, 19:15:25
Post #16





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 12.04.2007
Skąd: Kraków

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


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


--------------------
"What you are talking to me about what"
Go to the top of the page
+Quote Post
Gligamesh
post 22.06.2007, 19:20:27
Post #17





Grupa: Zarejestrowani
Postów: 227
Pomógł: 0
Dołączył: 13.06.2003
Skąd: rykowice

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


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ć

Ten post edytował Gligamesh 22.06.2007, 19:24:33
Go to the top of the page
+Quote Post
crashu
post 22.06.2007, 21:37:20
Post #18





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 14.04.2007

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


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:)


--------------------
Black Tarantula
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: 19.07.2025 - 20:37