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 может создавать строку из повторяющихся элементов с разделителем между ними, что недоступно в 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
Функция перестала молчаливо преобразовывать отрицательные значения в ноль. Теперь при передаче отрицательного числа $times возникает ошибка уровня E_WARNING.
В версиях до PHP 8.0 отрицательное значение $times приводилось к нулю, и функция возвращала пустую строку без предупреждений.
С PHP 7.0 добавлена строгая типизация для второго аргумента. При включенном режиме strict_types передача нецелочисленного значения вызывает TypeError.
Расширенные примеры применения
for ($i = 1; $i <= 5; $i++) {
echo str_repeat("*", $i) . PHP_EOL;
}* ** *** **** *****
$width = 15;
echo str_repeat("+", $width) . PHP_EOL;
echo "|" . str_repeat(" ", $width-2) . "|" . PHP_EOL;
echo str_repeat("+", $width);+++++++++++++++ | | +++++++++++++++
$nullBytes = str_repeat("\x00", 4);
echo bin2hex($nullBytes);00000000
// Более эффективно, чем конкатенация в цикле
$longString = str_repeat("Lorem ipsum ", 1000);
echo strlen($longString);12000
$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.