Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> ilość gałęzi w drzewie
MitS
post 17.10.2007, 20:48:23
Post #1





Grupa: Zarejestrowani
Postów: 262
Pomógł: 5
Dołączył: 8.02.2005
Skąd: Olsztyn / Zatorze

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


Witam !

mam malutki problem, otóż mam dla przykłądu taką tablicę:

Kod
array
(
    [tree] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [id_name] => 1
                    [name] => Motoryzacja
                    [Motoryzacja] => Array
                        (
                            [0] => Array
                                (
                                    [name] => Samochody
                                    [id] => 2
                                    [Samochody] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [name] => Osobowe
                                                    [id] => 5
                                                )
                                        )
                                )
                        )
                )
        )
)


i mój problem wkwi w tym że nie wiem jak policzyć ilość gałęzi "tree".
w tym wypadku wynik powinien być: 3

ma ktoś pomysl questionmark.gif

Ten post edytował MitS 17.10.2007, 21:32:08
Go to the top of the page
+Quote Post
Darti
post 17.10.2007, 23:57:32
Post #2





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


napisałem coś takiego, może zadziała:
  1. <?php
  2. function IlePoziomow($tablica,&$poziom = 0,&$maxpoziom = 0){
  3.  
  4. if (!is_array($tablica)) {
  5. return false;
  6. }
  7.  
  8. foreach ($tablica as $klucz => $wartosc){
  9. if(is_array($wartosc)){
  10. $poziom++;
  11. $poziom > $maxpoziom ? $maxpoziom = $poziom:''; 
  12. IlePoziomow($wartosc,$poziom,$maxpoziom);
  13. $poziom--;
  14. }
  15. }
  16. return $maxpoziom;
  17. }
  18. ?>


--------------------
The answer is out there, Neo. It's looking for you. And it will find you, if you want it to.
SERVER_SOFTWARE : Apache/2.2.4 (Win32) PHP/5.2.1
MySQL Client API version : 5.0.27
Go to the top of the page
+Quote Post
MitS
post 18.10.2007, 10:07:38
Post #3





Grupa: Zarejestrowani
Postów: 262
Pomógł: 5
Dołączył: 8.02.2005
Skąd: Olsztyn / Zatorze

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


Coś nie do konca dziala :/

próbowałem coś pokombinowac w tym kierunku lecz nic nie wychodzi,
a dodam że mam taką tablicę:

  1. <?php
  2. $tab[0]['name'] = "tree";
  3. $tab[0]['id'] = 1;
  4. $tab[0][$tab[0]['name']][0]['name'] = 'galaz1';
  5. $tab[0][$tab[0]['name']][0]['id'] = 2;
  6. $tab[0][$tab[0]['name']][0][$tab[0][$tab[0]['name']][0]['name']][0]['name'] = 'pod_galaz1';
  7. $tab[0][$tab[0]['name']][0][$tab[0][$tab[0]['name']][0]['name']][0]['id'] = 3;
  8. $tab[0][$tab[0]['name']][0][$tab[0][$tab[0]['name']][0]['name']][0][$tab[0][$tab[0]['name']][0][$tab[0][$tab[0]['name']][0]['name']][0]['name']][0]['name'] =
  9. $tab[0][$tab[0]['name']][0][$tab[0][$tab[0]['name']][0]['name']][0][$tab[0][$tab[0]['name']][0][$tab[0][$tab[0]['name']][0]['name']][0]['name']][0]['id'] = 4;
  10. $tab[0][$tab[0]['name']][1]['name'] = 'galaz2';
  11. $tab[0][$tab[0]['name']][1]['id'] = 2;
  12. ?>


i w tym wypadku powinien wynik być 4

ma ktoś jeszcze jakieś pomysły questionmark.gif
Go to the top of the page
+Quote Post
Cezar708
post 18.10.2007, 10:20:56
Post #4





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


nie wiem czy rozumiem, ale Tobie chodzi o liczbę poziomów (czyli de facto nie, ile ma gałęzi, tylko jak maksymalnie głęboko są)

Może ta rekurencyjna funkcja pomoże

  1. <?php
  2. function maxLevel($inArr){
  3. if ( is_array($inArr) ) {
  4. $maxLevel = 1;
  5. foreach ( $inArr as $arr ){
  6. if ( $is_array( $arr ){
  7. if ( $maxLevel < ( $tmpLevel = maxLevel($arr) ) ){
  8. $maxLevel = $tmpLevel;
  9. }
  10. }
  11. }
  12. } else {
  13. return 0;
  14. }
  15. return $maxLevel;
  16. }
  17. echo maxLevel($yourArray);
  18. ?>


pisałem z ręki i nie sprawdzałem, więc nie odpowiadam za działanie. Jeśli nie działa a o to mniej więcej chodziło to mogę potem dopracować
Go to the top of the page
+Quote Post
MitS
post 18.10.2007, 19:08:57
Post #5





Grupa: Zarejestrowani
Postów: 262
Pomógł: 5
Dołączył: 8.02.2005
Skąd: Olsztyn / Zatorze

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


Heh właśnie o to mi chodził (maksymalne zagłębienie)...

tylko że nie wiem czemu twója funkcja zwraca mi 1 tylko :/
będę bardzo wdzięczny jak byś pomógł biggrin.gif:D


...

no to inaczej się zapytam ....
jak napisać funkcję rekurencyjną (a może lepiej za pomocą jakiejś pętli iteracyjnej ?), która mi wyświetli taki wynik:

Motoryzacja (1)
Samochody (2)
Osobowe(5)


czyli wyświetli 'name' z każdego zagłębienia (niezaleznie ile tych zagłębien bedzie -> czyli moze być 100 a moze byc 1) i obok id tego name'a.
Męcze sie juz od paru godzin i nic nie wychodzi ... pomozecie ?

Ten post edytował MitS 18.10.2007, 19:11:15
Go to the top of the page
+Quote Post
Darti
post 18.10.2007, 21:15:24
Post #6





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


No to trzeba było tak od razu... :
  1. <?php
  2. function pokaz($tablica){
  3.  
  4. if(is_array($tablica)){
  5. if (isset($tablica['name']) && isset($tablica['id'])){
  6. echo $tablica['name'].'('.$tablica['id'].")\n";
  7. }
  8. foreach ($tablica as $key=>$value){
  9. pokaz($value);
  10. }
  11.  
  12. }
  13. }
  14.  
  15. pokaz($tablica);
  16. ?>


--------------------
The answer is out there, Neo. It's looking for you. And it will find you, if you want it to.
SERVER_SOFTWARE : Apache/2.2.4 (Win32) PHP/5.2.1
MySQL Client API version : 5.0.27
Go to the top of the page
+Quote Post
MitS
post 18.10.2007, 22:16:55
Post #7





Grupa: Zarejestrowani
Postów: 262
Pomógł: 5
Dołączył: 8.02.2005
Skąd: Olsztyn / Zatorze

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


ooo super smile.gif
dzięki:D:D:D
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 - 17:27