Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Tablice i Rekurencja
Forum PHP.pl > Forum > Przedszkole
kowciany
Witam !

Chciałbym napisać funkcję, która wyświetlałaby dowolną tablicę wielowymiarową [która też może składać się z tablic]. Na razie użyłem do tego rekurencji tylko mam problem z indeksacją. Wszystko jest okej, elementy się wyświetlają natomiast chciałbym aby wyświetlały się też indeksy elementów tak żeby była "pełna" ścieżka od bazowej tablicy bo używając klucza z foreach dostaję tylko ostatni indeks elementu. Próbowałem już wiele kombinacji z przekazywaniem i doklejaniem indeksów wywołując rekurencyjnie funkcje ale to też nie skutkowało bo od pewnego momentu dokleja "za dużo" a nie wiem jak mam wykrywać aby to obcinał. Macie może jakieś rozwiązanie na to ? Podaję poniższy kod bez rozwiązania problemu z indeksami:

  1. public function write($recTab,$index=""){
  2. ksort($recTab);
  3. foreach($recTab as $key => $node){
  4. if(is_array($node)){echo "1<br />"; $this->write($node,$index.=$key);} else {echo "1<br />"; echo $node."<br />";}
  5.  
  6. }


Przykładowa tablica to:
  1. $tab[0][0] = "a dir";
  2. $tab[0][1][0] = "z did";
  3. $tab[0][1][1] = "b dir";
  4. $tab[0][1][2] = "x dir";
  5. $tab[1][0] = "c dir";
  6. $tab[1][1] = "d dir";
  7. $tab[2][0] = "g dir";
  8. $tab[2][1] = "h dir";
  9. $tab[2][2][0] = "e dir";
  10. $tab[2][2][1] = "f dir";
  11.  
  12. $tObject->write($tab);


I efekt wywołania funkcji:

00 a dir
010 z did
011 b dir
012 x dir
010 c dir
011 d dir
0120 g dir
0121 h dir
01220 e dir
01221 f dir

jak widać zgadzają się tylko początkowe ponieważ później trzeba już obciąć.

Proszę o pomoc.
Spirit86
  1. echo '<pre>';
  2. print_r($tab);
  3. echo '</pre>';
kowciany
Wiem, że istnieje coś takiego jak print_r ale to nie jest rozwiązanie problemu, który określiłem w poście. Natomiast myślałem o tym żeby zajrzeć w bebechy print_r'a. Te funkcje php są w C pisane ? Można to jakoś podejrzeć ? Ściągnąłem kody źródłowe ale nie wiem w którym miejscu tego szukać.
#luq
Bo cały czas dodajesz coś do $index a nigdy nie usuwasz.


  1. function arrar_write( $arr, $index = '' ){
  2. ksort( $arr );
  3.  
  4. foreach( $arr as $k => $v ){
  5. if( is_array( $v ) ){
  6. arrar_write( $v, $index .= $k );
  7. $index = substr( $index, 0, -1 );
  8. }
  9. else{
  10. echo $index.$k.':'.$v.'<br />';
  11. }
  12. }
  13. }



Dla tablicy:

Kod
Array
(
    [0] => Array
        (
            [0] => pierwszy
            [1] => Array
                (
                    [0] => drugi
                    [1] => trzeci
                    [2] => Array
                        (
                            [0] => czwarty
                        )

                )

        )

    [1] => bla
)



Da

Kod
00:pierwszy
010:drugi
011:trzeci
0120:czwarty
1:bla
kowciany
Dzięki serdeczne #luq ! Dokładnie o to mi chodziło. Klikam w buttona pomocy winksmiley.jpg
Sam nie wiem czemu na to nie wpadłem. Tzn. wiedziałem, że trzeba to wyciąć ale że tak po prostu substr i to działą... no dziwne, ale działa smile.gif
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.