Использование рекурсивных функций и Heredoc вместе - PullRequest
0 голосов
/ 14 мая 2019

Я хотел бы повторить большой набор текста без необходимости мучительно экранировать все символы, это будет кошмар для отладки, и я хотел бы использовать heredoc.

Я прочитал документы и не могу это исправить.

function MySwal($items, $k){
    if ($k!=0) $k = $k+1; 

    if ($items[$k] != "end") {
    //if ($items != "end") {
        echo <<<MySWALSTUFF_A
          <p> at {$k} : processing {$items[$k]} . next item is {$items[$k+1]}
        MySWALSTUFF_A;
        //include this later
        echo MySwal($items, ($k+1)); //recursive function
    } else { //else  for if item is !=end 
        echo "<HR><h3>This is the end, beautiful friend... </h3>";
    }//if for item != end ends here :-)     
}

и вызовите это с MySwal ($myarray, 0), где последний элемент в массиве - "конец"

Теперь рекурсия не показывает вывод функции после 1-го раза. если $myarray имеет array("one", "two", "end"), вышеприведенный heredoc выполняется только для "one".

Заранее спасибо!

1 Ответ

1 голос
/ 14 мая 2019

Это потому, что вы увеличиваете k в функции:

if ($k!=0) $k = $k+1;

, а также при вызове функции:

echo MySwal($items, ($k+1));

Это приводит к пропуску значения в индексе1 в массиве.Удалите приращение внутри функции, и она отлично работает: https://3v4l.org/SuXLR

...