Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Tablice i Rekurencja, Problem z indexowaniem tablicy wielowymiarowej przy rekurencji.
kowciany
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 4.11.2009

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


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.
Go to the top of the page
+Quote Post
Spirit86
post
Post #2





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

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


  1. echo '<pre>';
  2. print_r($tab);
  3. echo '</pre>';


Ten post edytował Spirit86 4.11.2009, 14:58:48


--------------------
Audio: Metallica, Soil, RHCP, OffSpring, Green Day, "Retro", Gorillaz, Disturbed, Coma
DB: MySQL 4.1 | php: 4.4.3 Pomogłem Ci? Wciśnij przycisk POMÓGŁ.
Go to the top of the page
+Quote Post
kowciany
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 4.11.2009

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


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

Ten post edytował kowciany 4.11.2009, 15:42:33
Go to the top of the page
+Quote Post
#luq
post
Post #4





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


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


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
kowciany
post
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 4.11.2009

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


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
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 Aktualny czas: 19.08.2025 - 02:31