/
Программирование
/
Курс PHP
/

Агрегация данных (Строки)

PHP: Агрегация данных (Строки)

Агрегация применяется не только к числам, но и к строкам. Это такие задачи, в которых строка формируется динамически — то есть заранее неизвестно, какого она размера и что будет содержать.

Представьте себе функцию, которая умеет умножать строку, то есть повторять ее указанное количество раз:

<?php

repeat('hexlet', 3); // 'hexlethexlethexlet'

Принцип работы этой функции довольно простой — в цикле происходит «наращивание» строки указанное количество раз:

<?php

function repeat(string $text, int $times): string
{
    // Нейтральный элемент для строк – пустая строка
    $result = '';
    $i = 1;

    while ($i <= $times) {
        // Каждый раз добавляем строку к результату
        $result = "{$result}{$text}";
        $i = $i + 1;
    }

    return $result;
}

Распишем выполнение этого кода по шагам:

<?php

// Для вызова repeat('hexlet', 3);
$result = '';
$result = "{$result}hexlet"; // hexlet
$result = "{$result}hexlet"; // hexlethexlet
$result = "{$result}hexlet"; // hexlethexlethexlet

Наглядно процесс наращивания строки выглядит так:

repeat('hexlet', 3):

i=1: result = ''             . 'hexlet' = 'hexlet'
i=2: result = 'hexlet'       . 'hexlet' = 'hexlethexlet'
i=3: result = 'hexlethexlet' . 'hexlet' = 'hexlethexlethexlet'
                                            └── результат

Нейтральный элемент

Чтобы наращивание работало, нужно стартовое значение. Для строк таким значением является пустая строка ''.

Она называется нейтральным элементом, потому что при конкатенации ничего не меняет:

<?php

print_r('' . 'abc');  // => abc
print_r('abc' . '');  // => abc

Поэтому именно пустая строка всегда используется как начальное значение при агрегации строк.

Задание

Реализуйте функцию sanitizePhoneNumber(), которая принимает номер телефона из формы и возвращает строку без пробелов, скобок и дефисов.

Пользователи вводят номера по-разному, но перед сохранением их часто приводят к одному виду. Пройдите исходную строку посимвольно и соберите новый номер только из полезных символов.

<?php

sanitizePhoneNumber('+7 (999) 123-45-67'); // '+79991234567'
sanitizePhoneNumber('8 800 555 35 35');    // '88005553535'
sanitizePhoneNumber('(123) 456-7890');     // '1234567890'

Подсказки

  • Итоговый результат — строка.
  • Используйте пустую строку как начальное значение.
  • Проверить, входит ли символ в набор ' ()-', поможет функция str_contains().

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

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