przeszukiwanie drzewa daje złe wyniki

0

Jest drzewo i ma ono gałęzi trochę po kilka liści na gałęziach co jak to:

user image

no i teraz chcę policzyć wszystkie liście znajdujące się poniżej zadanego więc napisałem:


$user_id // korzeń
$level // poziom poszukiwań
$array // tablica z indeksami rodziców tzn. każdy 'user_id' ma listę swoich dzieci

1 | 2,3,4,5
2 | 6,7
3 | 8,9
4 |-
5 | 10,11,
6 | 12,13,14
7 | -
8 | -
9 | 15,16

[...]

$number // zmienna licząca


function countGroup($user_id, $level , $array , $number) {

$index=$array;

if (isset($index[$user_id])) {

	foreach ($index[$user_id] as $id) {

			countGroup($id, $level+1,$array,$number);

		$number++;
	}
}
return $number;
}

No i problem jest taki, że przeszukuje prawidłowo, jednak zwracany wynik jest nieprawidłowy.

Przykład prawdziwej tablicy testowej:

$array = array(10) {
  [0]=>
  array(1) {
    [0]=>
    string(1) "1"
  }
  [2]=>
  array(47) {
    [0]=>
    string(1) "2"
    [1]=>
    string(1) "3"
    [2]=>
    string(1) "4"
    [3]=>
    string(1) "8"
    [4]=>
    string(1) "9"
    [5]=>
    string(2) "10"
    [6]=>
    string(2) "14"
    [7]=>
    string(2) "15"
    [8]=>
    string(2) "16"
    [9]=>
    string(2) "21"
    [10]=>
    string(2) "25"
    [11]=>
    string(2) "26"
    [12]=>
    string(2) "27"
    [13]=>
    string(2) "28"
    [14]=>
    string(2) "29"
    [15]=>
    string(2) "30"
    [16]=>
    string(2) "31"
    [17]=>
    string(2) "32"
    [18]=>
    string(2) "33"
    [19]=>
    string(2) "34"
    [20]=>
    string(2) "36"
    [21]=>
    string(2) "37"
    [22]=>
    string(2) "38"
    [23]=>
    string(2) "39"
    [24]=>
    string(2) "51"
    [25]=>
    string(2) "40"
    [26]=>
    string(2) "41"
    [27]=>
    string(2) "42"
    [28]=>
    string(2) "43"
    [29]=>
    string(2) "44"
    [30]=>
    string(2) "45"
    [31]=>
    string(2) "46"
    [32]=>
    string(2) "47"
    [33]=>
    string(2) "48"
    [34]=>
    string(2) "49"
    [35]=>
    string(2) "50"
    [36]=>
    string(2) "52"
    [37]=>
    string(2) "53"
    [38]=>
    string(2) "54"
    [39]=>
    string(2) "56"
    [40]=>
    string(2) "57"
    [41]=>
    string(2) "58"
    [42]=>
    string(2) "61"
    [43]=>
    string(2) "65"
    [44]=>
    string(2) "66"
    [45]=>
    string(2) "67"
    [46]=>
    string(2) "68"
  }
  [1]=>
  array(3) {
    [0]=>
    string(2) "60"
    [1]=>
    string(2) "63"
    [2]=>
    string(2) "64"
  }
  [3]=>
  array(9) {
    [0]=>
    string(1) "5"
    [1]=>
    string(1) "6"
    [2]=>
    string(1) "7"
    [3]=>
    string(2) "11"
    [4]=>
    string(2) "12"
    [5]=>
    string(2) "13"
    [6]=>
    string(2) "17"
    [7]=>
    string(2) "20"
    [8]=>
    string(2) "23"
  }
  [21]=>
  array(2) {
    [0]=>
    string(2) "22"
    [1]=>
    string(2) "59"
  }
  [8]=>
  array(3) {
    [0]=>
    string(2) "24"
    [1]=>
    string(2) "18"
    [2]=>
    string(2) "55"
  }
  [30]=>
  array(1) {
    [0]=>
    string(2) "35"
  }
  [61]=>
  array(1) {
    [0]=>
    string(2) "62"
  }
  [55]=>
  array(2) {
    [0]=>
    string(2) "69"
    [1]=>
    string(2) "70"
  }
  [70]=>
  array(2) {
    [0]=>
    string(2) "71"
    [1]=>
    string(2) "72"
  }
}

Jakieś pomysły?

0

Nie powinno być tak?

function countGroup($user_id, $level , $array , $number) {
	$index=$array;
	if (isset($index[$user_id])) {
    		foreach ($index[$user_id] as $id) {
 			$number++;
            		countGroup($id, $level+1,$array,$number);
    		}
	}
	return $number;
}

ew pomyśl o globalnej zmiennej liczącej

1 użytkowników online, w tym zalogowanych: 0, gości: 1