Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ilość gałęzi w drzewie
Forum PHP.pl > Forum > PHP
MitS
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
Darti
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. ?>
MitS
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
Cezar708
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ć
MitS
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 ?
Darti
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. ?>
MitS
ooo super smile.gif
dzięki:D:D:D
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.