VGVolkov
@VGVolkov
самоучка

Почему не работает return?

function encrypt($text, $n) {
	
	$len = strlen($text);
	
		for($i = 1; $i < $len; $i += 2){

		$str1 .= substr($text, $i, 1);
		}	
		for($i = 0; $i < $len; $i += 2){

		$str2 .= substr($text, $i, 1);
		}

	if($n > 0 ){
		$m = $n - 1;
		$text = $str1.$str2;		
		encrypt($text, $m);
		
	} else {
		//echo  $text.' '; //выводит правильный результат!
		return $text;
	}
	
}
	
echo encrypt('This is a test!', 2); // результата нет...

Задачка на шифрование, необходимо формировать строку из каждого второго символа исходной строки. В аргументе указано сколько раз нужно прокрутить строку через этот механизм (решил рекурсией). Вопрос, почему не работает return? причем если в else рядом выводить, то видно, что функция правильно сработала, и результат есть, но если выводить результат функции, то экран пуст...
  • Вопрос задан
  • 118 просмотров
Решения вопроса 2
twobomb
@twobomb
У вас что вывода ошибок нет?
function encrypt($text, $n) {	
$str1 = $str2 = "";
for($i = 0; $i < strlen($text); $i++)
	if($i%2 == 0)
		$str2 .= $text[$i];
	else
		$str1 .= $text[$i];
if($n > 0 )
	$text = encrypt($str1.$str2, $n - 1);	
return $text;
}
echo encrypt('This is a test!', 2);
Ответ написан
gromdron
@gromdron
Работаю с Bitrix24
Ну так все правильно!
Вы же получаете результат для своей строки на второй итерации, а return на первой не работает.
Заменяем:
encrypt($text, $m);
На
return encrypt($text, $m);

И видим результат: s eT ashi tist!
Можно конечно еще и функцию упростить:
function encrypt($text, $n)
{
	if ( $n < 1 )
	{
		return $text;
	}
	$str1 = $str2 = "";
	for($i = 0, $len = strlen($text); $i < $len; $i++)
	{
		if ( $i%2 == 0 )
		{
			$str2 .= $text[$i];
		}
		else
		{
			$str1 .= $text[$i];
		}
	}

	return encrypt( $str1.$str2, ($n-1));
}
  
echo encrypt('This is a test!', 2);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
doublench21
@doublench21
Вывод ошибок для кого? $str1 и $str2 вы вообще не определили. Ну судя по коду что вы кинули.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы