как увеличить счетчик в рекурсии?
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 можно не передавать, а отлавливать только внутри.