Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Efekt rekurencji bez rekurencji, tabelka tabelek.
sanneo
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 15.01.2008
Skąd: Warszawa

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


Witajcie.

Próbuję rozwiązać swój problem dotyczący efektu rekurencji bez rekurencji, a to z powodu ograniczeń PHP co do rekurencji do 100 poziomu.

Moim celem jest wygenerowanie tabelki tabelek, które składają się na strukturę jak w linku poniżej, bez ograniczeń co do zagłębienia, jedyne ograniczenie, które akceptuję, to limit pamięci RAM komputera (HTML w przeglądarce).

Efekt jaki chcę uzyskać (bez zagłębienia):

http://sanneo.nazwa.pl/_tmp/tabela1.html

Drugi poziom zagłębienia i kolejne:

http://sanneo.nazwa.pl/_tmp/tabela2.html
http://sanneo.nazwa.pl/_tmp/tabela3.html
http://sanneo.nazwa.pl/_tmp/tabela4.html

Próbuję już od wielu godzin, ale bez rezultatu.

Proszę o pomoc.

Pozdrawiam.
Mariusz (sanneo)

Ten post edytował sanneo 11.01.2012, 22:18:02
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Orzeszekk
post
Post #2





Grupa: Zarejestrowani
Postów: 260
Pomógł: 14
Dołączył: 8.09.2011

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


Ew jak sobie lubisz komplikowac zycie to tak :
  1. public function draw ()
  2. {
  3. $current = 0;
  4. $objectsStack[] = $this;
  5. $nodeCounter[] = 0;
  6. DrawElement: echo '<', $objectsStack[$current]->name;
  7. if ($objectsStack[$current]->attributes)
  8. {
  9. foreach ($objectsStack[$current]->attributes as $name => $value)
  10. {
  11. echo ' ', $name, '="', $value, '"';
  12. }
  13. }
  14. if (($objectsStack[$current]->content) || (!($objectsStack[$current]->shortable)))
  15. {
  16. echo '>';
  17. DrawContent: if (($objectsStack[$current]->content[$nodeCounter[$current]]))
  18. {
  19. if ($objectsStack[$current]->content[$nodeCounter[$current]]->name)
  20. {
  21. $objectsStack[$current + 1] = $objectsStack[$current]->content[$nodeCounter[$current]];
  22. ++$current;
  23. $nodeCounter[$current] = 0;
  24. goto DrawElement;
  25. }
  26. else
  27. {
  28. echo $objectsStack[$current]->content[$nodeCounter[$current]];
  29. ++$nodeCounter[$current];
  30. goto DrawContent;
  31. }
  32. }
  33. else
  34. {
  35. echo '</', $objectsStack[$current]->name, '>';
  36. if ($current)
  37. {
  38. --$current;
  39. ++$nodeCounter[$current];
  40. goto DrawContent;
  41. }
  42. }
  43. }
  44. else
  45. {
  46. echo '/>';
  47. if ($current)
  48. {
  49. --$current;
  50. ++$nodeCounter[$current];
  51. goto DrawContent;
  52. }
  53. }
  54. }


sztuczna rekurencja zrobiona na skokach GOTO dodanych w 5.3. to akurat zamienia drzewo dom na kod html. $objectsStack[] to stos.
z czytelnoscia kodu nie ma to nic wspolnego (IMG:style_emoticons/default/biggrin.gif) ale jest szybsze niz natywna rekurencja nawet.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.12.2025 - 05:16