To co zamierzasz napisać moim zdaniem nie ma sensu. Próbujesz wykonać coś, co jest nielogiczne. Coś jak "echo goto".
Możesz napisać coś innego np. używając "&" lub słowa "static". Możliwe, że jeszcze coś innego dałoby się znaleźć, aby to napisać, np. manual/recursivearrayiterator.
Polecam zapoznać się z językiem assembly między innymi na architekturę x86_64.
Czy napiszesz osobną funkcję, która wywoła echo i umieścisz tę funkcję w rekurencyjnej funkcji, to byłoby prawie to samo, gdybyś te echo umieścił bezpośrednio w tej funkcji rekurencyjnej.
Zauważ, że definicja funkcji jest taka: (dla uproszczenia) dla każdego argumentu funkcji, funkcja zwraca unikatową wartość. Reasumując, w tym samym czasie nie możesz mieć różnych return.
Twoim celem było zapewne to (pseudo-kod):
1. function rec(&$i, $arr) {
// ...
return $arr[++$i];
}
$i = 0;
2. echo rec($i, $arr);
Run:
jump 2.
run rec
jump 2.
echo 1;
jump2.
run rec
jump2.
echo 2;
jump2.
run rec
jump2.
echo 3;
...
Zatem widać na powyższym pseudo-kodzie, że wystarczy wywołanie funkcji wrzucić w pętlę, co mija się z celem, dlatego lepiej chyba od razu wrzucić echo do ciała funkcji rekurencyjnej.
Możliwe też, że chcesz wykorzystać generator - słowo kluczowe "yield" Generator_(computer_programming)#PHP. Generators syntax.
function array_bar(array $arr, int &$param = 0, string $el = '', bool $flag = false) {
if($param >= count($arr)) { // or ==
return false;
}
if($flag == true) {
return ($el = $arr[$param]);
}
if($flag == false) {
$flag = true;
}
++$param;
{
return array_bar($arr, $param, $el, $flag);
}
}
$xx = ['a','b','c'];
$param = -1;
echo array_bar($xx, $param);
echo array_bar($xx, $param);
echo array_bar($xx, $param);
echo array_bar($xx, $param);
?>