---

name: Формирование строк в циклах
theory: |

  Ещё одно использование циклов – формирование строк. Подобная задача нередко встречается в веб-программировании. Она сводится к обычной агрегации с применением интерполяции или конкатенации.

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

  ```php
  <?php

  reverse('Hexlet'); // telxeH
  ```

  Общая идея переворота состоит в следующем: нужно брать символы по очереди с начала строки и соединять их в обратном порядке. Звучит довольно просто. Давайте проверим:

  ```php
  <?php

  function reverse($str)
  {
      $i = 0;
      // Нейтральный элемент для строк это пустая строка
      $result = '';

      while ($i < strlen($str)) {
          $currentChar = $str[$i];
          // Соединяем в обратном порядке
          $result = "{$currentChar}{$result}";
          // Тоже самое через конкатенацию
          // $result = $currentChar . $result;
          $i = $i + 1;
      }

      return $result;
  }

  $name = 'Bran';
  reverse($name); // 'narB'
  // Проверка нейтрального элемента
  reverse(''); // ''
  ```

  https://replit.com/@hexlet/php-basics-loops-using-reverse

  Единственный возможно сложный момент в этом коде – прочувствовать, как собирается сама строка. Так как каждый следующий символ прикрепляется к результирующей строке слева, то, в конечном итоге, строка оказывается перевернута.

instructions: |

  Реализуйте функцию `mysubstr()`, которая извлекает из строки подстроку указанной длины. Она принимает на вход два аргумента (строку и длину) и возвращает подстроку начиная с первого символа:

  Пример вызова:

  ```php
  <?php

  $str = 'If I look back I am lost';
  mysubstr($str, 1); // 'I'
  mysubstr($str, 7); // 'If I lo'
  ```

  https://replit.com/@hexlet/php-basics-edge-cases-mysubstr

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

tips: []
