Задать вопрос
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 рядом выводить, то видно, что функция правильно сработала, и результат есть, но если выводить результат функции, то экран пуст...
  • Вопрос задан
  • 120 просмотров
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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 вы вообще не определили. Ну судя по коду что вы кинули.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽