Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak Zliczyc ilosc wykonań funkcji, Wewnatrz tehrze Funkcji
Yacho
post
Post #1





Grupa: Zarejestrowani
Postów: 148
Pomógł: 0
Dołączył: 16.06.2003

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


Problem jest nastepujacy :

Mam funkcje rekurencyjną :
  1. <?php
  2. function getCatTree($id)
  3. {
  4. $query = "SELECT cat_id FROM mod_xgallery_categories WHERE parent_id=$id";
  5. $result = mysql_query($query);
  6. while ($row = mysql_fetch_assoc($result))
  7. {
  8. //echo $row['cat_id'];
  9.  $i[] = $row['cat_id'];
  10.  
  11. }
  12. //print_r($i);
  13. if(is_array($i))
  14. {
  15.  
  16. foreach ($i as $v)
  17. {
  18. echo $v.'<br>';
  19. getCatTree($v);
  20. }
  21.  }
  22. }
  23.  
  24. getCatTree(0);
  25.  
  26. ?> 


Pobiera ona kategorie z bazy ulozone w drzewo - znaczy kazda kategoria ma przyporzadkowany Parent - i funkcja wyswietla od przekazanego $id parenta "w dół do końca"

Problem jest taki ze chcialbym wiedziec jaka jest "głębokosc" na danej kategorii aby drzewko odpowiednio ułozyc z tabulacjami (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

jedyne co mi sie nasuwa to :

a) przed wywolaniem funkcji utworzyc sobie iterator powiedzmy $i i zwiększać jego wartość o jeden w Funkcji....
(IMG:http://forum.php.pl/style_emoticons/default/cool.gif) pobierajac dane z bazy przy każdej kategorii pobierac pełną listę jego parentów....

Rozwiazanie a) jest fajne wydajnościowo ale troche niepraktyczne - bez zadeklarowania zmiennej przed funkcją nie mam możliwosci liczenia "głębokosci" - co w sumie tworzy dosc nieprzejrzystą konstrkcję.

(IMG:http://forum.php.pl/style_emoticons/default/cool.gif) rozwiazanie dosc przyjemne bo wygodne w użyciu ale odpada pod wzgledem wydajnosciowym.....

Wiec ma ktos moze pomysł jak rozwiązać taki problem bez użycia iteratorów poza funkcją ? a jesli musze użyc jakiegos zapytania SQL to niech to beda jakies 3 a nie po jednym zapytaniu per kategoria.....
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Yacho
post
Post #2





Grupa: Zarejestrowani
Postów: 148
Pomógł: 0
Dołączył: 16.06.2003

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


yyy nie rozumiem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) mozez objasnic dokladnie ?

A konkretnie.... jaka jest roznica wtedy powiedzy GetTree a getChilds ?

Get Tree printuje mi wszystkie childy az do konca drzewa.... nie kumam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

OK napisalem takie cos :
  1. <?php
  2. function getChilds($id)
  3. {
  4. $query = "SELECT cat_id,name FROM mod_xgallery_categories WHERE parent_id=$id";
  5. $result = mysql_query($query);
  6. while ($row = mysql_fetch_assoc($result))
  7. {
  8.  $data[] = $row;
  9. }
  10.  
  11. return $data;
  12. }
  13.  
  14. function getTree ($id, $poziom = 0)
  15. {
  16. $childs = getChilds($id);
  17.  if(is_array($childs))
  18.  {
  19. foreach($childs as $k => $v)
  20. {
  21. echo $v['name'] .' '. $poziom. '<br/>';
  22.  
  23. getTree($v['cat_id'], $poziom +1);
  24. }
  25.  }
  26. }
  27. getTree(0);
  28.  
  29. ?>


i dziala (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) dzieki - nigdy byum nie pomyslal ze mozna to rozbuc na 2 funkcje i wtedy sie tak ladnie prosto robi (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Yacho 2.12.2005, 22:17:56
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: 2.10.2025 - 21:10