2015-08-11 2 views
-1

У меня есть функция, и в зависимости от некоторых значений она должна быть выполнена еще раз с разными значениями. Вот пример:PHP возвращается из функции и цикла снова

function loop_again($num) { 

    if (isset($num)) { 

     if ($num == 1) { 

      loop_again(2); 

     } 

     return $num.'<br />'; 

    } 

} 

echo loop_again(1); 

Мой желаемый результат:

1 
2 

Но я только получаю 1.

Как я могу повторно запустить функцию и вернуть оба результата в порядок?

+0

@SandeepBansal Он не всегда будет следующим целым числом. Это может быть совершенно другое число. – JROB

+0

Вы ничего не делаете с возвратом второго звонка – DarkBee

+0

Возможно, вы ищете 'рекурсию'? –

ответ

4

Ваш второй цикл исчезает в эфире, потому что вы ничего не делаете с возвращаемым значением. Вы хотите либо изменить свой return на эхо, либо добавить рекурсию к возвращаемой строке.

function loop_again($num) { 
    $number_string = ''; 
    if (isset($num)) { 
     $number_string .= $num.'<br />'; 
     if ($num == 1) { 

      $number_string .= loop_again(2); 

     } 

     return $number_string; 

    } 

} 

echo loop_again(1); 
+1

Техническое это не 'рекурсия', поскольку нет реального конечного состояния, хотя – DarkBee

1

Вы должны фактически захватить и сохранить возвращаемое значение из рекурсивных вызовов внутри функции:

function loop_again($num) { 

    if (isset($num)) { 

     if ($num == 1) { 

      $num = $num.'<br/>'.loop_again(2); //changed here 

     } 

     return $num.'<br />'; 

    } 

} 

echo loop_again(1); 
0

В целом, это кажется очень странным образом, чтобы закодировать функцию. Возможно, лучший подход состоит в том, чтобы построить массив всех данных в одной и той же функции и вернуть его.

В противном случае, если вы должны использовать рекурсию, передайте данные, которые определены в функции.

function loop_again($level=1,$data=array()) { 
    // append data to $data, and pass the args $level and $data into each recursive call 

} 
Смежные вопросы