как увеличить счетчик в рекурсии?

function r($b,$a){
    $new_mas = array();
    $i = 0;

    foreach($b as $uniq){

        var_dump($i);


        $k = array_search($uniq,$a);
        if($k!==false){
            $new_mas[]=$uniq;   
            unset($a[$k]);
        }else{
            unset($b[$i]);
        }
        if($i==(sizeof($b)-1)){
            if(sizeof($a)){
                $new_mas=array_merge($new_mas,r($b,$a));
            }
        }
        $i++;
    }

    return $new_mas; 
}

$dddd = r($b,$a);

Функция выводит

int(0)
int(1)
int(0)
int(1)
int(0)
int(1)

Мне нужно, чтобы счетчик постоянно увеличивался на 1, а не обнулялся в каком-то моменте. Подскажите, что неправильно ?


Ответы (2 шт):

Автор решения: Vladislav Tikhomirov

Происходит это по той причине, что у вас в начале функции присвается значение 0 переменной i. Значит, при каждом её вызове, i становится равной 0.

Чтобы этого не происходило, достаточно вынести строку $i = 0; за пределы фунции.

→ Ссылка
Автор решения: Pavel

Как вариант передавать счетчик рекурсии третьим параметром функции через ссылку:

function r($b,$a,&$i=0){

...
   if(sizeof($a)){
       $new_mas=array_merge($new_mas,r($b,$a,$i));
   }
....
}

$i=0;
r($b,$a,$i);
var_dump($i);

Но при запуске функции $i можно не передавать, а отлавливать только внутри.

→ Ссылка