Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Wyswietlanie zawartosci tablicy rekurencyjnie
iwosz
post 10.05.2011, 12:58:26
Post #1





Grupa: Zarejestrowani
Postów: 62
Pomógł: 3
Dołączył: 30.07.2009

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


Witam,

chcę wyświetlić zawartość tablicy jako lista html <ul>, tablica wygląda np. tak:
  1. $test_array = Array(
  2. 0 => Array(
  3. 'id' => 10,
  4. 'parent_id' => 0,
  5. 'name' => 'Test10',
  6. 'child_nodes' => Array(
  7. 0 => Array(
  8. 'id' => 11,
  9. 'parent_id' => 10,
  10. 'name' => 'Test11',
  11. 'child_nodes' => Array()
  12. ),
  13. 1 => Array(
  14. 'id' => 12,
  15. 'parent_id' => 10,
  16. 'name' => 'Test12',
  17. 'child_nodes' => Array()
  18. )
  19. )
  20. ),
  21. 1 => Array(
  22. 'id' => 20,
  23. 'parent_id' => 0,
  24. 'name' => 'Test20',
  25. 'child_nodes' => Array(
  26. 0 => Array(
  27. 'id' => 21,
  28. 'parent_id' => 20,
  29. 'name' => 'Test21',
  30. 'child_nodes' => Array()
  31. )
  32. )
  33. )
  34. );


Więc chciał bym uzyskać kod:
  1. <ul>
  2. <li>
  3. Test10
  4. <ul>
  5. <li>
  6. Test11
  7. </li>
  8. <li>
  9. Test12
  10. </li>
  11. </ul>
  12. </li>
  13. <li>
  14. Test20
  15. <ul>
  16. <li>
  17. Test21
  18. </li>
  19. </ul>
  20. </li>
  21. </ul>


potrzebuje szybkiej wskazówki co jest nie tak w poniższym kodzie:
  1. function generate_menu_tree($tree_str, $nodes) {
  2. if( !empty( $nodes ) ) {
  3. $tree_str .= '<ul>';
  4. foreach( $nodes as $node ) {
  5. $tree_str .= '<li>';
  6. $tree_str .= strtolower($node['name']);
  7. if( !empty($node['child_nodes'])) {
  8. $tree_str .= $this->generate_menu_tree($tree_str, $node['child_nodes']);
  9. }
  10. $tree_str .= '</li>';
  11. }
  12. $tree_str .= '</ul>';
  13. }
  14. return $tree_str;
  15. }


i wywołanie:
  1. $tree_html = $this->generate_menu_tree('', $test_array);


W efekcie dostaję błędny kod w postaci:
  1. <ul>
  2. <li>Test10
  3. <ul>
  4. <li>Test10
  5. <ul>
  6. <li>Test11</li>
  7. <li>Test12</li>
  8. </ul>
  9. </li>
  10. </ul>
  11. itd...


Czy problem jest związany z wywołaniem tej funkcji czy z samą funkcją? Szukam testuję jednak nie mogę uzyskać w 100% poprawnego wyniku.

Proszę chociaż o wskazówkę w czym może tkwić problem... co_jest.gif

Nikt nie pomoże? Chociaż jakaś wskazóweczka, we wszystkich przykładach w sieci jest taki schemat wyświetlania, nie wiem tylko czemu np. pierwsza gałąź przechodzi 2 razy... co_jest.gif


--------------------
Pozdrawiam,

iwosz.
Go to the top of the page
+Quote Post
nospor
post 10.05.2011, 13:07:37
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No bo zbędnie przekazujesz $tree_str przez co za każdym razem funkcja wchodzi z wypełniomym już $tree_str i on się ciągle powiększa o stare dane

  1. function generate_menu_tree($nodes) {
  2. if( !empty( $nodes ) ) {
  3. $tree_str = '<ul>';
  4. foreach( $nodes as $node ) {
  5. $tree_str .= '<li>';
  6. $tree_str .= strtolower($node['name']);
  7. if( !empty($node['child_nodes'])) {
  8. $tree_str .= $this->generate_menu_tree($node['child_nodes']);
  9. }
  10. $tree_str .= '</li>';
  11. }
  12. $tree_str .= '</ul>';
  13. }
  14. return $tree_str;
  15. }
  16.  
  17. $tree_html = $this->generate_menu_tree($test_array);

I już smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
iwosz
post 10.05.2011, 13:21:11
Post #3





Grupa: Zarejestrowani
Postów: 62
Pomógł: 3
Dołączył: 30.07.2009

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


Geniusz. :]

Nie wiem co się stało że tego nie zauważyłem, sam się teraz smieje... sciana.gif brzydal.gif

No dobra teraz oczywiście działa tak jak trzeba... wybaczcie za zawracanie gitary worriedsmiley.gif


--------------------
Pozdrawiam,

iwosz.
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: 14.08.2025 - 12:36