1

Str repeat: примеры (PHP)

Функция str_repeat для повторения строк в PHP
Раздел: Работа со строками
str_repeat(string string, int times): string

Описание функции str_repeat

Назначение и применение

Функция str_repeat в PHP используется для создания строки, состоящей из многократно повторяющейся подстроки. Эта функция часто применяется для генерации визуальных разделителей, заполнения полей фиксированной длины, создания простых графических элементов в консоли или шаблонизации повторяющихся структур.

Аргументы функции

Функция принимает два обязательных параметра:

  • string $string - исходная строка, которую необходимо повторять. Может содержать любое количество символов, включая пустую строку.
  • int $times - положительное целое число, определяющее количество повторений. Если передано значение 0, функция возвращает пустую строку. Отрицательные значения вызывают ошибку уровня E_WARNING начиная с PHP 8.0.

Синтаксис: str_repeat(string $string, int $times): string

Базовые примеры использования

Простое повторение строки
echo str_repeat("*", 10);
**********
Повторение составной строки
echo str_repeat("PHP ", 3);
PHP PHP PHP
Использование нулевого повторения
var_dump(str_repeat("test", 0));
string(0) ""
Создание разделителя
echo "Заголовок".str_repeat("-", 20);
Заголовок--------------------

Похожие функции в PHP

Функция str_pad дополняет строку до заданной длины другим символом. В отличие от str_repeat, позволяет указать, с какой стороны добавлять заполнение (слева, справа или с обеих сторон).

implode с array_fill

Комбинация implode и array_fill может создавать строку из повторяющихся элементов с разделителем между ними, что недоступно в str_repeat.

Рекомендации по выбору

Функция str_repeat оптимальна для простого повторения строки без разделителей. Для заполнения строк до определенной длины удобнее использовать str_pad. Если требуется сложная логика формирования повторяющихся элементов с разделителями, подойдет комбинация implode с array_fill.

Типичные ошибки

Отрицательное количество повторений

До PHP 8.0 функция возвращала пустую строку при отрицательном аргументе. С PHP 8.0 вызывает ошибку уровня E_WARNING:

echo str_repeat("a", -5);
Warning: str_repeat(): Argument #2 ($times) must be greater than or equal to 0
Большое количество повторений

При очень больших значениях $times может произойти переполнение памяти:

echo strlen(str_repeat("a", PHP_INT_MAX));
Fatal error: Allowed memory size exhausted
Неявное преобразование типов

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

echo str_repeat("-", "3abc");
---

Изменения в последних версиях PHP

PHP 8.0

Функция перестала молчаливо преобразовывать отрицательные значения в ноль. Теперь при передаче отрицательного числа $times возникает ошибка уровня E_WARNING.

PHP 7.4 и ранее

В версиях до PHP 8.0 отрицательное значение $times приводилось к нулю, и функция возвращала пустую строку без предупреждений.

Типизация аргументов

С PHP 7.0 добавлена строгая типизация для второго аргумента. При включенном режиме strict_types передача нецелочисленного значения вызывает TypeError.

Расширенные примеры применения

Генерация прогрессивной строки
Пример php
for ($i = 1; $i <= 5; $i++) {
    echo str_repeat("*", $i) . PHP_EOL;
}
*
**
***
****
*****
Создание таблицы псевдографики
Пример php
$width = 15;
echo str_repeat("+", $width) . PHP_EOL;
echo "|" . str_repeat(" ", $width-2) . "|" . PHP_EOL;
echo str_repeat("+", $width);
+++++++++++++++
|             |
+++++++++++++++
Формирование бинарных данных
Пример php
$nullBytes = str_repeat("\x00", 4);
echo bin2hex($nullBytes);
00000000
Оптимизация операций с длинными строками
Пример php
// Более эффективно, чем конкатенация в цикле
$longString = str_repeat("Lorem ipsum ", 1000);
echo strlen($longString);
12000
Шаблонизация с заполнением
Пример php
$template = "[%s]";
$content = str_repeat("=", 20);
echo sprintf($template, $content);
[====================]

Аналоги в других языках

Str repeat в Python

Метод str * n или оператор умножения строки на число:

print("*" * 10)
**********

Str repeat в Javascript

Метод String.prototype.repeat():

console.log("-".repeat(5));
-----

Str repeat в MySQL

Функция REPEAT() работает аналогично PHP:

SELECT REPEAT('SQL ', 3);
SQL SQL SQL
Основные отличия

В Python и JavaScript синтаксис более лаконичный. Все языки генерируют ошибку при отрицательном количестве повторений, но обработка может отличаться. В PHP с версии 8.0 отрицательный аргумент вызывает предупреждение, в то время как JavaScript выдает RangeError.

PHP str_repeat function comments

En
Str repeat Repeat a string