PHP: Обход строк

Циклы подходят не только для обработки чисел, но и при работе со строками — и это благодаря возможности получить конкретный символ по его индексу. Ниже пример кода, который распечатывает буквы каждого слова на отдельной строке:

<?php

function printNameBySymbol(string $name): void
{
    $i = 0;
    // Такая проверка будет выполняться до конца строки,
    // включает последний символ
    // Его индекс — `длина строки - 1`
    while ($i < strlen($name)) {
        // Обращаемся к символу по индексу
        print_r("$name[$i]\n");
        $i = $i + 1;
    }
}

$name = 'Arya';
printNameBySymbol($name);
// => 'A'
// => 'r'
// => 'y'
// => 'a'

Цикл проходит по каждому символу строки по очереди:

'Arya'
 │ │ │ │
 A r y a
 ↓ ↓ ↓ ↓
каждый символ обрабатывается по очереди

Самое главное в этом коде — поставить правильное условие в while. Это можно сделать сразу двумя способами:

  • $i < strlen($name)
  • $i <= strlen($name) - 1

Оба способа приводят к одному результату.

Переворот строки

Вместо печати можно собирать новую строку. Например, напишем функцию, которая переворачивает строку:

<?php

function reverseString(string $text): string
{
    $result = '';
    $i = strlen($text) - 1;

    while ($i >= 0) {
        $result = $result . $text[$i];
        $i = $i - 1;
    }

    return $result;
}

print_r(reverseString('Arya') . "\n");   // => ayrA
print_r(reverseString('hexlet') . "\n"); // => telxeh

Переменная $result инициализируется пустой строкой как нейтральным элементом для конкатенации. Цикл начинается с последнего индекса (strlen($text) - 1), двигается к нулю и завершается, когда индекс становится меньше нуля. На каждом шаге к результату добавляется текущий символ. В итоге строка строится в обратном порядке.

Задание

Напишите функцию maskCardNumber(), которая скрывает номер банковской карты. Функция должна заменить все символы строки на *, кроме последних четырех.

Пример работы:

<?php

maskCardNumber('1234567812345678'); // '************5678'
maskCardNumber('12345678');         // '****5678'

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются