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 вы вообще не определили. Ну судя по коду что вы кинули.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
24 апр. 2024, в 22:11
2000 руб./за проект
24 апр. 2024, в 22:00
500 руб./в час
24 апр. 2024, в 21:49
10000 руб./за проект