Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Zliczenie elementów w tablicy tworzonej rekursywnie
miedzna
post
Post #1





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


Pobieram rekursywnie z drzewka (tabela zwykła: ID, PID, NAME) wszystkie ID dla danej gałęzi drzewka. Potrzebuje uzyskać liczbę wszystkich dzieci w głąb dla danej gałęzi. Pobieram rekursywnie ID i wrzucam je do tablicy, następnie zliczam tablicę i mi wychodzi wynik: 111111, czyli sześć razy 1, a ja chcę uzyskać liczbę 6, czyli liczbę wszystkich dzieci.

  1. <?php
  2. function IleKrokow($pid) {
  3.  
  4.    $result=mysql_query("SELECT id FROM tabela WHERE pid = ".$pid);
  5.  
  6.    while ( $row = mysql_fetch_array($result) ) {
  7.  
  8.        IleKrokow($row["id"]);
  9.  
  10.        $tabela = array($row["id"]);
  11.  
  12.        echo count($tabela);
  13.  
  14.    }
  15. }
  16. IleKrokow($_GET["Page"]);
  17. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Złe podejście do tego drzewa. Użyj drzew left right( lewo prawo)

A u ciebie powinno być coś w ten deseń
  1. <?php
  2. function IleKrokow($pid, &$ile=0) {
  3.  
  4.   $result=mysql_query("SELECT id FROM tabela WHERE pid = ".$pid);
  5.    $ile+=mysql_num_rows($result);
  6.   while ( $row = mysql_fetch_array($result) ) {
  7.  
  8.       IleKrokow($row["id"], $ile);
  9.  
  10.   }
  11. }
  12. IleKrokow($_GET["Page"], $ile);
  13. ?>


Przy dużej czestotliwosci wywoływania tego skryptu lepiej zaopatrzyc twoja tabele w dodatkowe pole "num_childs" dla którego, przy dodawaniu/usuwaniu elementów z drzewa, przyliczałbyś ilość dzieci jeszcze raz.

//EDIT "literówka"

Ten post edytował wookieb 30.07.2009, 10:50:53
Go to the top of the page
+Quote Post

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: 23.08.2025 - 17:02